Почему существует разница между кодировкой командной строки Windows ипакетный файл?
-
05-07-2019 - |
Вопрос
Например, предположим, у меня есть пакетный файл под названием 'test.cmd'
и это просто содержит:
echo %1
Я могу вызвать это непосредственно из командной строки с помощью 'test.cmd some¬arg'
и в результате получается, что строка 'some¬arg'
печатается.
Однако, если я помещу этот же вызов во второй пакетный файл, вызываемый 'tester.cmd'
в качестве аргумента, и я вызываю это из командной строки, результатом является то, что строка 'some%arg'
печатается.
Что именно портит кодировку и как мне это обойти?Я уверен, что исправлял это раньше, но не могу вспомнить как...
Спасибо!
Решение
Это связано с тем, что ваш пакетный файл закодирован на кодовой странице, отличной от той, на которой в данный момент находится cmd.exe.
В западных конфигурациях по умолчанию cmd.exe запускается в CP850, но текстовые редакторы обычно работают в CP1252 (то, что часто ошибочно называют Latin-1 или ISO-8859-1).
Символы "" и "¼" имеют один и тот же символьный код на этих двух кодовых страницах - "BC".
Решение простое.Либо закодируйте ваш пакетный файл на кодовой странице 850, либо переключитесь cmd.exe на кодовую страницу 1252, выдав chcp 1252
.