Преобразование текстового файла из ANSI в UTF-8 в пакетных сценариях Windows

9871
Raj

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

0

2 ответа на вопрос

2

Синтаксис PowerShell довольно прост. Эта команда открывает файл в кодировке по умолчанию и сохраняет его как UTF-8 с спецификацией:

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

1
pholpar

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 
Вы инициализировали ваши StreamsReader и StreamWriter с неправильной кодировкой. 6 лет назад 0