Известно, что bat/cmd файлы выводят текст в кодировке OEM, например, простая команда:

echo текст по-русски

сохранит этот текст в кодировке 866, и Блокнот Windows покажет его так:

⥪бв Ї®-агббЄЁ

Чтобы этот можно было обработать в других программах, приходится прибегать к разным ухищрениям.

Так, в программе nhsms пришлось добавить параметр CodePage для указания, что исходящее смс записано в OEM кодировке.

Или же приходится использовать дополнительные программы nhrt для перекодировки файла:

nhrt -cp:OEM,Unicode 1.txt

Однако, встроенные возможности командного интерпретатора CMD позволяют сохранять текст в Unicode, если запускать этот же командный файл немного по-другому:

cmd /u /c 1.cmd > u.txt

Получившийся файл u.txt имеет кодировку UCS-2 Little Endian без Byte Order Mark и корректно открывается всеми программами, работающими с Unicode.

Что почитать по теме

Справка по cmd на microsoft.com

Syntax
cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}] [/t:fg] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] string]

как настроить, чтобы cmd файл всегда запускался как /u на http://stackoverflow.com/ — англ.

The Idea is: I don’t know, if this window was startet with /u, but I don’t care. I just start the very same file (%~dpf0) in a new window, which IS started with /u and close the current window. Of course this would mean an enless loop, which I avoid with the additional parameter /unicode. The second run detects that parameter (which has to be the first one) and deletes it (shift). Just add this «header» (until the rem-line) to your Batch.

В bat файле вывести текст в Unicode
Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *