Преобразование текстового файла из ansi в UTF-8 в пакетном сценарии windows

У нас есть текстовый файл, который находится в формате ANSI по умолчанию, и который должен быть преобразован в формат UTF-8. Есть ли способ использовать общие команды Windows DOS для преобразования файла? Мы можем использовать PowerShell, но только эта командная строка должна запускаться из другого пакетного процесса.

5
задан Raj
источник

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

2
отвечен 2018-03-07 14:03:26
источник

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
1
отвечен pholpar 2018-04-23 14:50:29
источник

Другие вопросы ansi batch-file command-line utf-8 windows