PowerShellscript, плохой разговор о кодировке файлов - PullRequest
4 голосов
/ 28 сентября 2011

У меня есть сценарий 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 из командной строки, она работает нормально.

Что я не прав?

1 Ответ

6 голосов
/ 28 сентября 2011

Когда вы перенаправляете вывод в файл, Powershell использует Unicode в качестве кодировки по умолчанию.Вместо использования оператора перенаправления вы можете направить на Out-File с помощью переключателя -Encoding UTF8.

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

В следующей статье TechNet содержится дополнительная информация (эквивалентная Get-Help Out-File -full в Powershell v2).

Если это вообще поможет вашему сценарию, стоит отметить, что вы можете использовать Powershell для преобразования кодировки.

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