Iconv is converting to UTF-16 instead of UTF-8 when invoked from powershell

故事扮演 提交于 2019-12-01 04:48:11

问题


I have a problem while trying to batch convert the encoding of some files from ISO-8859-1 to UTF-8 using iconv in a powershell script.

I have this bat file, that works ok:

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 
)

I need to convert all files on the directories structure, so I programmed this other script, this time using 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
  }

And using this the result is the files be converted to UTF-16. I have no clue about what I am doing wrong.

Could anyone help me with this? Could be it some kind of problem with the encoding of powershell itself?

I am using W7 and WXP and LibIconv 1.9.2


回答1:


> essentially is using the Out-File cmdlet who's default encoding is Unicode. Try:

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

or with params:

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

And since iconv.exe is outputting in UTF8, you have to tell the .NET console subsystem how to intrepret the stdin stream like so (execute this before iconv.exe):

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


来源:https://stackoverflow.com/questions/3604753/iconv-is-converting-to-utf-16-instead-of-utf-8-when-invoked-from-powershell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!