Почему существует разница между кодировкой командной строки Windows ипакетный файл?

StackOverflow https://stackoverflow.com/questions/252970

Вопрос

Например, предположим, у меня есть пакетный файл под названием '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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top