【问题标题】:PowerShellscript, bad file encoding conversationPowerShellscript,错误的文件编码对话
【发布时间】:2011-09-28 15:23:36
【问题描述】:

我有一个用于文件字符编码对话的 PowerShell 脚本。

Get-ChildItem -Path D:/test/data -Recurse -Include *.txt |
ForEach-Object {
  $inFileName = $_.DirectoryName + '\' + $_.name
  $outFileName = $inFileName + "_utf_8.txt"
  Write-Host "windows-1251 to utf-8: " $inFileName -> $outFileName  
  E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName > $outFileName
}

但它不是 utf-8,而是将文件字符编码转换为 utf-16。当我从命令行调用 iconv 实用程序时,它工作正常。

我做错了什么?

【问题讨论】:

    标签: powershell character-encoding iconv


    【解决方案1】:

    当您将输出重定向到文件时,Powershell 使用 Unicode 作为默认编码。除了使用重定向运算符,您可以使用-Encoding UTF8 开关通过管道传递到Out-File

    E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName | Out-File -FilePath $outFileName -Encoding UTF8
    

    以下 TechNet 文章包含更多信息(相当于 Powershell v2 中的 Get-Help Out-File -full)。

    如果它对您的方案有帮助,值得注意的是,您也可以使用 Powershell 进行编码转换。

    Get-Content $inFileName -Encoding ASCII |
    Out-File -FilePath $outFileName -Encoding UTF8
    

    【讨论】:

    • 你确定Get-Content cmdlet有这样一个参数作为-Encoding吗?
    • @Gustav.Calder - 是的
    • @Gustav.Calder 有,但它没有出现在Get-Content 的帮助中,因为它是文件系统提供程序提供的动态参数。您可以在Get-Help FileSystem找到更多信息。
    猜你喜欢
    • 2019-04-23
    • 2017-05-15
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多