У нас есть текстовый файл, который находится в формате ANSI по умолчанию, и который должен быть преобразован в формат UTF-8. Есть ли способ использовать общие команды Windows DOS для преобразования файла? Мы можем использовать PowerShell, но только эта командная строка должна запускаться из другого пакетного процесса.
Преобразование текстового файла из ansi в UTF-8 в пакетном сценарии windows
2 ответа
синтаксис PowerShell довольно прост. Эта команда открывает файл в кодировке по умолчанию и сохраняет его как UTF-8 с BOM:
Get-Content <SrcFile.txt> -Encoding Oem | Out-File <DestFile.txt> -Encoding utf8
на Encoding
параметр принимает следующий:Ascii, BigEndianUnicode, BigEndianUTF32, Byte, Default, Oem, String, Unicode, Unknown, UTF32, UTF7, UTF8
Get-Content может быть не оптимальным, так как он обрабатывает входной файл построчно (по крайней мере, по умолчанию, если вы не используете Raw
переключатель, как описано ниже), и может привести к изменению конца строки (например, при перемещении текстовых файлов между системами Unix и Windows). У меня были серьезные проблемы в сценарии только потому, что это, и потребовалось около часа, чтобы найти точную причину. Подробнее об этом в этот пост. Из-за такого поведения Get-Content также не является лучшим выбором, если производительность имеет значение.
вместо этого вы можете использовать PowerShell в сочетании классов .NET (если в вашей системе установлена версия .NET Framework):
$sr = New-Object System.IO.StreamReader($infile)
$sw = New-Object System.IO.StreamWriter($outfile, $false, [System.Text.Encoding]::Default)
$sw.Write($sr.ReadToEnd())
$sw.Close()
$sr.Close()
$sw.Dispose()
$sr.Dispose()
или даже более просто, используйте Raw
переключатель как описано здесь чтобы избежать накладных расходов и прочитать текст в одном блоке:
Get-Content $inFile -Raw
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]