Почему команда DIR Windows производит??? символы вместо русского алфавита?
В окне Windows 10 через командную строку я запускаю эту команду:
C: \ Users \ idiot \ Music> dir / a: d / s / b >> tom-music-2016-july.txt
Цель состоит в том, чтобы перечислить все каталоги. Но я заметил, что каталоги с нелатинскими буквами в имени будут печатать????? вместо русских или китайских иероглифов. Зачем?
Изначально я думал, что проблема в системных шрифтах. (У меня не установлен русский языковой пакет). Но я могу переименовать файлы в русские имена файлов в Win Explorer. Важно отметить, что когда я запускаю команду DIR в окне (не отправляя ее в выходной файл), я четко вижу русские символы.
Это подразумевает, что проблема заключается либо в команде, которая что-то передает в файл, либо в текстовом редакторе Windows, который пытается прочитать вывод.
Я пытался открыть файл в 2 отдельных текстовых редакторах и даже в веб-браузере, но я вижу символы вопросительного знака независимо.
Кто-нибудь может предложить причину этой проблемы и возможное решение?
Правильно ли я предположил, что мне не нужно будет выполнять какую-либо обработку самих файлов или каталогов? Благодарю.
Постскриптум: Я особенно озадачен тем, почему русские символы хорошо отображаются в окне консоли, но когда они передаются в файл, я вижу знаки вопроса.
1 ответ
Ничего секретного: кодировка файла, созданного с помощью>
перенаправление следует за текущей активной кодовой страницейcmd
. ?
(знак вопроса) — это просто замена (маркер замены), если символ не существует в такой кодовой странице.
Решение: использовать
UTF-8
(кодовая страница 65001) какchcp 65001
Следующий пример иллюстрирует ( и, возможно, доказывает ) это довольно хорошо:
d:\bat\UnASCII Names> chcp 1250
Active code page: 1250
d:\bat\UnASCII Names> dir /b /AD >dir1250.txt
d:\bat\UnASCII Names> chcp 65001
Active code page: 65001
d:\bat\UnASCII Names> dir /b /AD >dir65001.txt
The dir1250.txt
иdir65001.txt
файлы, открытые в Notepad++:
Обратите внимание, что так называемый
ANSI
это кодовая страница 1250 (Центральная Европа) в моем регионе, а у вас может быть, например, 1252 (США и Западная Европа)…