Почему команда 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 (США и Западная Европа)…

Другие вопросы по тегам