Спасибо Макдауэллу и Ромуло за то, что они указали мне правильное направление. Я понял, что мне нужно изменить свое приложение (в Delphi), которое генерирует пакет, чтобы оно использовало надлежащую (OEM) кодовую страницу, совместимую с командным процессором в Windows. Я не нашел ничего для преобразования строк кодовой страницы, но я обнаружил функции Windows API SetFileApisToOEM и SetFileApisToANSI;
Я поместил их в начало и конец моей программы, например так:
Сценарий должен быть написан в той же кодировке, что и cmd.exe .
Тип chcp в командной строке и посмотрите, что вы получите. Затем откройте файл в редакторе, который поддерживает эту кодировку. Для меня chcp выводит кодовую страницу 850 , поэтому я редактирую свой скрипт в JEdit , выбирая IBM850 в качестве кодировки файла. Я получаю тот же результат, редактируя файл в PSPad с форматом , установленным на OEM .
PS: я проверил ваши шаги на моей машине и - символ, который я пишу в notepad.exe (используя кодировку ANSI по умолчанию), также преобразуется в ± при чтении из командной строки, поэтому он выглядит как ваш Машина использует аналогичные кодировки ANSI и OEM. Чтобы быть уверенным, попробуйте заменить - на ¤ (с notepad.exe ). Это заставляет скрипт работать правильно для меня при запуске из командной строки (потому что значение байта ANSI ¤ такое же, как у OEM - ).
Codepages are a problem in batch files as they are not allowed to contain Unicode. The easiest way to avoid this issue altogether would probably be to use WSH or Powershell. I haven't found a workaround for batch files so far which really bothers me as I consider myself a Unicode zealot :)
Я смотрел на обработку символов в cmd.exe и думаю Ромуло ударил ногтем по голове. По умолчанию в приглашении используются старые кодовые страницы DOS (OEM) (возможно, для совместимости с программами DOS). Вы пишете свой файл, используя (вероятно) кодовую страницу Windows по умолчанию (вероятно, 1252), которая отличается. Используйте edit.com для редактирования командного файла.
Если я наберу chcp в приглашении, он сообщит кодовую страницу 850.
Так, например, если я используйте Блокнот , чтобы напечатать это:
DIR Pezuñero
... это закодировано как 1252 с двоичными значениями:
ñ
44 49 52 20 50 65 7A 75 F1 65 72 6F
Если я использую , отредактируйте , чтобы написать файл, он закодирован как 850 с двоичными значениями:
ñ
44 49 52 20 50 65 7A 75 A4 65 72 6F
Одна вещь, на которую я не смотрел, это использование переключателя cmd / U ,
Возможно, вам понадобится установить кодовую страницу, в которой n будет с ~ сверху.