Меня волнуют три понятия:
Кодировка консоли вывода
Внутренняя кодировка командной строки (измененная с помощью chcp)
.bat Кодировка текста
Самый простой сценарий для меня: первые два будут упомянуты в одной и той же кодировке, скажем, CP850, и я буду хранить .bat в той же кодировке (в Notepad ++, меню Кодировка → Наборы символов → Западноевропейские → OEM 850 ).
Но предположим, что кто-то передает мне .bat в другой кодировке, скажем, CP1252 (в Notepad ++, меню Encoding * → Наборы символов → Западноевропейский → Windows-1252 )
Тогда я бы изменил внутреннюю кодировку командной строки, используя chcp 1252.
Это изменяет кодировку, используемую для общения с другими процессами, ни с устройством ввода, ни с консолью вывода.
Таким образом, мой экземпляр командной строки будет эффективно посылать символы в 1252 через свой файловый дескриптор STDOUT, но приглушенный текст появляется, когда консоль декодирует их как 850 (é равно Ú).
Затем я изменяю файл следующим образом:
@echo off
perl -e "use Encode qw/encode decode/;" -e "print encode('cp850', decode('cp1252', \"ren -hlice hlice\n\"));"
ren -hlice hlice
Сначала я отключаю echo, чтобы команды не выводились, если явно не выполняется echo ... или perl -e "print ..."
Затем я ставлю этот шаблон каждый раз, когда мне нужно что-то выдать
perl -e "использовать Encode qw / encode decode /;" -e "print encode ('cp850', decode ('cp1252', \" ren -hélice hélice \ n \ "));"
Я заменю текст, который я покажу, на это: ren -hélice hélice.
А также мне может понадобиться заменить кодировку консоли на cp850, а другую кодировку на стороне - на cp1252.
А чуть ниже я поставил нужную команду.
Я разбил проблемную строку на половину вывода и половину реальной команды.
Первое, что я сделаю наверняка: «é» интерпретируется как «é» посредством транскодирования. Это необходимо для всех выходных предложений, так как консоль и файл находятся в разных кодировках.
Вторая, настоящая команда (пробормотала с @echo off), зная, что у нас одинаковая кодировка как из chcp, так и из текста .bat, достаточно для правильной интерпретации символов.