Конвертировать текстовые файлы ANSI в UTF8 в командной строке Windows

7876
dpprdan

Я хотел бы преобразовать () ANSI-кодированные текстовые файлы (Win 1252) в UTF8 без спецификации, в идеале через вызов командной строки. Мой вариант использования: я экспортирую файлы .tex из Stata, которые хочу скомпилировать с помощью LuaLaTeX. Stata, по-видимому, не поддерживает UTF8, LuaLaTeX ничего не поддерживает, но, таким образом, подавляет некоторые символы, не входящие в ASCII. Из Stata я могу вызывать команды оболочки, поэтому было бы неплохо, если бы я мог выполнять преобразование на лету из моих скриптов Stata.

Поэтому в идеале я хотел бы иметь возможность вызывать команду, например, например convert2UTF.cmd file.tex. Другим хорошим вариантом будет некоторое пакетное преобразование файлов в папке (например, преобразование всех файлов с помощью * stata.tex). Кроме того, было бы замечательно, если бы решение работало с инструментами Windows по умолчанию (минимум Win 7, даже лучше XP).

Подобные вопросы были заданы здесь ранее. Подход Cygwin / GnuWin32 является проблематичным, так как я хотел бы иметь возможность конвертировать без необходимости установки дополнительного программного обеспечения на компьютере. PowerShell подход выглядит многообещающим, но, видимо, out-file -en utf8сохраняет файл с BOM.

Другой подход PowerShell, который, кажется, конвертировать в UTF8 без спецификации

foreach($i in ls -recurse -filter "*.*") { if ( $i.Extension.ToLower() -eq ".tex" ) { $MyFile = Get-Content $i.fullname  [System.IO.File]::WriteAllLines($i.fullname, $MyFile) } } 

К сожалению, я не могу понять, как его запустить. Я сохранил его как скрипт powershell в той же папке, что и файлы .tex, но при запуске он не касается их. Так что, видимо, чего-то не хватает. Излишне говорить, что мои знания PowerShell близки к нулю. Кроме того, я хотел бы передать имя файла в качестве аргумента при вызове его из Stata.

2
Может быть способ использовать подход PowerShell, а не писать спецификацию. См. [Использование PowerShell для записи файла в UTF-8 без спецификации] (http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the -bom). martineau 11 лет назад 0
@martineau: Это очень похоже на код, который я разместил, верно? Но как мне это запустить? Например, когда я вставляю `[System.IO.File] :: WriteAllLines (out.tex, $ MyFile)` в powershell, я получаю ParserError ... dpprdan 11 лет назад 0
Да, это похоже, однако, не видя точную ошибку ParserError, трудно сказать, что именно не так - я думаю, вы передаете неправильные аргументы `WriteAllLines` или передаете их в неправильном порядке. martineau 11 лет назад 0
@martineau: Хорошо, я публикую `$ MyFile = Get-Content in.tex`, за которым следует` [System.IO.File] :: WriteAllLines (out.tex, $ MyFile) `, и я получаю` CategoryInfo: ParserError: (CloseParenToken : TokenId) [], ParentContainsErrorRecordExceptionFullyQualifiedErrorId: MissingEndParenthesisInMethodCall` dpprdan 11 лет назад 0

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

-1
Kamil

I think you may try to use VBS script and ADODB.Stream object.

Google search: "vbs convert file ansi to utf-8"