5

Это несколько связано с вопросом

В Windows 7 каталог или дерево не могут отображать символы Юникода, даже начиная cmd с cmd /U

Даже в Windows 7 я обнаружил, что единственный способ получить Unicode для перехода в файл - это

> cmd /U
> dir /B > files.txt

файл будет в "Unicode", когда я открою в "Блокноте" и попробую "Сохранить как", и если я открою файл / файл dir /B > files.html и открою HTML-файл в Firefox, он может показать это с использованием кодировки UTF-16 (или UTF). -16 LE).

но, если я хочу увидеть его на экране вместо того, чтобы перейти к файлу, это все равно невозможно. Есть ли способ сделать это? Возможно, как-то сказать cmd не показывать непечатаемые символы как "?"

Обновление: я пробовал cmd.exe, Cygwin Bash на Windows и PowerShell. Они одинаковые. За исключением случаев, когда я изменяю «Свойства -> Шрифт» на Консоль или Консоль Lucida, есть некоторые улучшения - теперь это не вопросительный знак, а квадратная или квадратная с вопросительным знаком.

Более дорогие компьютеры Mac с Mac OS X могут это сделать. Бесплатный Ubuntu тоже может это сделать.

5 ответов5

5

Это очень старый вопрос, но все приведенные здесь ответы неверны.

Вы никогда не увидите вывод Unicode в командной строке Windows (CMD.exe). Причина в том, что CMD не может отображать Unicode. Однако он может отображать DBCS (двухбайтовый набор символов).

Например, если вы хотите увидеть вывод на японском языке, вам нужно изменить системный языковой стандарт на японский и перезагрузиться. Затем вы сможете увидеть символы японской DBCS (т.е. Shift-JIS) в командной строке. Windows поддерживает японские кодовые страницы DBCS Shift-JIS, упрощенный китайский, корейский и традиционный китайский "Big5".

Кстати, вы можете направить UTF-16 (неточно используемый взаимозаменяемо с "Unicode" от Microsoft) в файл, затем открыть этот файл, скажем, в блокноте, и просмотреть символы Unicode. Вы также можете пометить и скопировать тарабарский текст из CMD.exe, вставить его в Блокнот и увидеть символы Юникода. Другими словами, CMD поддерживает Unicode, но не отображает Unicode.

Вы можете найти больше информации в этом блоге.

1

Основываясь на вашем имени пользователя, я подозреваю, что вы в основном работаете с азиатскими языками.

Инструменты Windows работают в обычном режиме в юникоде (как вы увидели, отправив вывод dir в файл и открыв этот файл в редакторе):

  1. инструмент делает свое дело
  2. выводит символы юникода
  3. другая программа получает этот вывод и должна отображать его.

чтобы отобразить любой символ на экране, программа на шаге 3 должна найти глиф, соответствующий данной последовательности байтов. пример:

  • 0x65 'a' соответствует другому глифу в каждом шрифте (поэтому 'a' выглядит по-разному от шрифта к шрифту)

  • 0x937 'Ω' (греческое слово 'омега') также отображает различные глифы в каждом шрифте

это отображение работает только если шрифт имеет глиф для данной последовательности байтов. в противном случае визуальный результат отличается, иногда вы видите '?иногда бриллианты и т. д.

еще раз: dir создает байтовые последовательности, которые иногда находятся в диапазоне ASCII, иногда в диапазоне Юникода (в зависимости от того, какие имена файлов он находит). он отправляет эти последовательности в другую программу, которая отвечает за фактическое отображение байтовых последовательностей. чтобы иметь возможность отображать эти последовательности, эта программа должна отобразить последовательность на глиф. чтобы сделать это, он должен искать в шрифте глиф. если шрифт не имеет глифа для данной последовательности, программа не может отобразить последовательность байтов, созданную, например, dir .

Итак, решение вашей проблемы (видя любой юникод-символ в «консоли / терминале» окон): используйте шрифт для программы, в которой есть (почти) каждый глиф для (почти) любой заданной последовательности байтов Юникода.

0

https://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how

Используйте chcp 65001 чтобы изменить кодовую страницу на UTF8, и используйте Lucida Console.

0

Это не имеет ничего общего с кодировками, поскольку консоль Windows всегда использует Unicode для внутреннего использования. Символы просто недоступны в используемых вами шрифтах, которые предназначены для программирования и европейских языков. В настоящее время у меня нет доступа к Windows, но я помню, что мог печатать греческие символы после переключения на шрифт Lucida Console. Использование шрифта, такого как DejaVu Sans Mono, может работать.

0

Хорошо, это решение с использованием PowerShell:

1) Нажмите кнопку Start в Windows 7
2) Теперь в пустой строке введите PowerShell
3) Выберите PowerShell ISE <- обратите внимание, что это ISE

Теперь, если вы выполните ls , вы сможете увидеть символы Юникода ...

4) если вы также используете chcp 65001 , то, если ваша программа печатает символы UTF-8, они также будут хорошо отображаться.

Вы также можете ls > list.txt а затем type list.txt и содержимое также отобразится в символах Unicode.

tree прежнему не будет отображать символы Юникода.

также, внутри PowerShell ISE, cmd /U /C dir /B также не будет работать.

ls -R будет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .