PowerShellscript, bad file encoding conversation

妖精的绣舞 提交于 2019-12-18 08:48:20

问题


I have a PowerShell script for the conversation of file character encoding.

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
}

But instead of utf-8 it converts file character encoding into utf-16. When I invoke the iconv utility from command line it works fine.

What do I wrong?


回答1:


When you redirect output to a file, Powershell is using Unicode as the default encoding. Instead of using the redirection operator, you can pipe to Out-File with a -Encoding UTF8 switch.

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

The following TechNet article has more information (equivalent to Get-Help Out-File -full in Powershell v2).

  • Out-File

In case it helps your scenario at all, it's worth noting that you can use Powershell to do the encoding conversion also.

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


来源:https://stackoverflow.com/questions/7585548/powershellscript-bad-file-encoding-conversation

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