Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encoding 从powershell调用时,Iconv正在转换为UTF-16而不是UTF-8_Encoding_Powershell_Iconv_Utf - Fatal编程技术网

Encoding 从powershell调用时,Iconv正在转换为UTF-16而不是UTF-8

Encoding 从powershell调用时,Iconv正在转换为UTF-16而不是UTF-8,encoding,powershell,iconv,utf,Encoding,Powershell,Iconv,Utf,我在尝试在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:

我在尝试在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,libiconv1.9.2本质上是使用Out-File cmdlet,它的默认编码是Unicode。尝试:

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控制台子系统如何像这样对stdin流进行加密(在iconv.exe之前执行此命令):


谢谢你的回复,基思。我刚试过。现在输出文件是UTF-8编码的,但是一些字符被破坏(例如,ñ和á)。在iconv输出中,它们是正常的(至少我看到它们在使用我的BAT版本时是良好的)。你知道吗?你需要告诉PowerShell iconv.exe使用的是什么编码。设置控制台输出编码,以便PowerShell知道如何解释从iconv.exe中产生的字节-
[console]::outpunecoding=[Text.encoding]::UTF8
-如本文所述
[Console]::OutputEncoding = [Text.Encoding]::UTF8