【问题标题】:Iconv is converting to UTF-16 instead of UTF-8 when invoked from powershell从 powershell 调用时,Iconv 正在转换为 UTF-16 而不是 UTF-8
【发布时间】:2010-08-30 22:37:07
【问题描述】:

我在尝试使用 powershell 脚本中的 iconv 将某些文件的编码从 ISO-8859-1 批量转换为 UTF-8 时遇到问题。

我有这个 bat 文件,可以正常工作:

for %%f in (*.txt) do (
  echo %%f
  C:\"Program Files"\GnuWin32\bin\iconv.exe -f iso-8859-1 -t utf-8 %%f > %%f.UTF_8_MSDOS 
)

我需要转换目录结构中的所有文件,所以我编写了另一个脚本,这次使用的是 powershell:

Get-ChildItem -Recurse -Include *.java |
  ForEach-Object {
    $inFileName = $_.DirectoryName + '\' + $_.name
    $outFileName = $inFileName + "_UTF_8"
    Write-Host Convirtiendo $inFileName -> $outFileName  
    C:\"Program Files"\GnuWin32\bin\iconv.exe -f iso-8859-1 -t utf-8 $inFileName > $outFileName
  }

使用它的结果是将文件转换为 UTF-16。我不知道我做错了什么。

谁能帮我解决这个问题?会不会是powershell本身的编码有问题?

我正在使用 W7 和 WXP 以及 LibIconv 1.9.2

【问题讨论】:

    标签: encoding powershell iconv utf


    【解决方案1】:

    > 本质上是使用默认编码为 Unicode 的 Out-File cmdlet。试试:

    iconv.exe ... | Out-File -Encoding Utf8
    

    或带参数:

    & "C:\Program Files\GnuWin32\bin\iconv.exe" -f iso-8859-1 -t utf-8 $inFileName |
       Out-File -Encoding Utf8 $outFileName 
    

    而且由于 iconv.exe 以 UTF8 格式输出,您必须告诉 .NET 控制台子系统如何像这样解释标准输入流(在 iconv.exe 之前执行此操作):

    [Console]::OutputEncoding = [Text.Encoding]::UTF8 
    

    【讨论】:

    • 感谢您的回复基思。我刚试过。现在输出文件是 UTF-8 编码的,但是一些字符被破坏(例如ñ和á)。在 iconv 输出中它们没问题(至少我看到它们在使用我的 BAT 版本时很好)。有什么想法吗?
    • 你需要告诉 PowerShell iconv.exe 使用的是什么编码。设置控制台输出编码,以便 PowerShell 知道如何解释来自 iconv.exe 的字节 - [Console]::OutputEncoding = [Text.Encoding]::UTF8 - 如此处所述 keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!7212.entry
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2011-03-09
    • 2013-02-25
    相关资源
    最近更新 更多