Как использовать символы Юникода в командной строке Windows?

317

У нас есть проект в Team Foundation Server (TFS), в котором есть не английский символ (š). При попытке написать несколько вещей, связанных со сборкой, мы столкнулись с проблемой - мы не можем передать букву š инструментам командной строки. Командная строка или что-то еще портит ее, и утилита tf.exe не может найти указанный проект.

Я пробовал разные форматы для .bat-файла (ANSI, UTF-8 с и без спецификации ), а также создавал сценарии в JavaScript (что по сути является Unicode) - но не повезло. Как мне выполнить программу и передать ей командную строку Unicode ?

Vilx-
источник
1
@JohannesDewender - Копирование-вставка пошла не так?
Vilx-
2
Python 3.6: «консоль по умолчанию в Windows принимает все символы Unicode с этой версией» (ну, большинство из них для меня), НО вам нужно настроить консоль: щелкните правой кнопкой мыши в верхней части окна (команды cmd или python IDLE) ), по умолчанию / шрифт выберите «Консоль Lucida».
JinSnow
Возможный дубликат вывода строк Unicode на консоли Windows
phuclv
2
@ LưuVĩnhPhúc - Нет, речь идет о передаче аргументов командной строки Unicode, а не об отображении текста в консоли. Консоль может вообще не вмешиваться.
Vilx-

Ответы:

68

Мой опыт: я использую ввод / вывод Unicode в консоли в течение многих лет (и делаю это много раз в день. Более того, я разрабатываю инструменты поддержки именно для этой задачи). Существует очень мало проблем, насколько вы понимаете следующие факты / ограничения:

  • CMDи «консоль» являются несвязанными факторами. CMD.exeэто просто одна из программ, которые готовы «работать внутри» консоли («консольные приложения»).
  • AFAIK, CMDимеет отличную поддержку Unicode; Вы можете вводить / выводить все символы Unicode, когда активна любая кодовая страница.
  • Консоль Windows имеет МНОГО поддержки Unicode - но она не идеальна (просто «достаточно хороша»; см. Ниже).
  • chcp 65001это очень опасно. Если программа не была специально разработана для обхода дефектов в API Windows (или не использует библиотеку времени выполнения C, которая имеет эти обходные пути), она не будет работать надежно. Win8 исправляет половину этих проблем cp65001, но остальное все еще применимо к Win10 .
  • Я работаю в cp1252. Как я уже сказал: для ввода / вывода Unicode в консоли не нужно устанавливать кодовую страницу .

Детали

  • Для чтения / записи Unicode на консоль приложение (или его библиотека времени выполнения C) должно быть достаточно умным, чтобы использовать не File-I/OAPI, а Console-I/OAPI. (Например, посмотрите, как это делает Python .)
  • Аналогично, чтобы читать аргументы командной строки Unicode, приложение (или его библиотека времени выполнения C) должно быть достаточно умным, чтобы использовать соответствующий API.
  • Консольный рендеринг шрифтов поддерживает только символы Юникода в BMP (другими словами: ниже U+10000). Поддерживается только простая отрисовка текста (поэтому европейские и некоторые восточноазиатские языки должны нормально работать, если используются предварительно составленные формы). [Здесь есть мелкий мелкий шрифт для восточной азии и для символов U + 0000, U + 0001, U + 30FB.]

Практические соображения

  • Значения по умолчанию для Window не очень полезны. Для лучшего опыта нужно настроить 3 части конфигурации:

    • Для вывода: полный консольный шрифт. Для достижения наилучших результатов я рекомендую мои сборки . (Инструкции по установке присутствуют там - и также перечислены в других ответах на этой странице.)
    • Для ввода: способная раскладка клавиатуры. Для достижения наилучших результатов я рекомендую мои макеты .
    • Для ввода: разрешить шестнадцатеричный ввод Unicode .
  • Еще одна ошибка с «Вставкой» в консольное приложение (очень техническое):

    • Ввод шестнадцатеричных символов обеспечивает ввод символа KeyUpof Alt; все остальные способы доставки персонажа происходят KeyDown; так много приложений не готовы видеть персонажа на KeyUp. (Применимо только к приложениям, использующим Console-I/OAPI.)
    • Вывод: многие приложения не будут реагировать на входные события HEX.
    • Кроме того, то, что происходит с «вставленным» символом, зависит от текущей раскладки клавиатуры: если символ можно набирать без использования префиксных клавиш (но с произвольной сложной комбинацией модификаторов, как в Ctrl-Alt-AltGr-Kana-Shift-Gray*), то он доставляется с помощью эмулируемого нажатия клавиши. Это то, что ожидает любое приложение - так что вставка всего, что содержит только такие символы, это хорошо.
    • Однако «другие» символы доставляются путем эмуляции ввода HEX .

    Вывод : если ваша раскладка клавиатура поддерживает ввод много символов без ключей приставки, некоторые приложения багги может пропустить символыкогда выPasteчерез интерфейс Консоли:Alt-Space E P. ( Вот почему я рекомендую использовать раскладки клавиатуры!)

Следует также помнить, что «альтернативные,« более функциональные »консоли» для Windows вовсе не являются консолями . Они не поддерживают Console-I/OAPI, поэтому программы, которые используют эти API, не будут работать. (Программы, которые используют только «API-интерфейсы файлового ввода-вывода для файловых дескрипторов консоли», будут работать нормально.)

Одним из примеров таких не консольных является частью MicroSoft Powershell. Я не использую это; чтобы экспериментировать, нажмите и отпустите WinKey, затем введите powershell.


(С другой стороны, существуют программы, такие как ConEmuили ANSICONкоторые пытаются сделать больше: они «пытаются» перехватить Console-I/OAPI, чтобы заставить «настоящие консольные приложения» работать тоже. Это определенно работает для игрушечных примеров программ; в реальной жизни это может или может не решить ваши конкретные проблемы. Эксперимент.)

Резюме

  • установить шрифт, раскладку клавиатуры (и при желании разрешить ввод в шестнадцатеричном формате).

  • используйте только программы, которые проходят через Console-I/OAPI и принимают аргументы командной строки Unicode. Например, любая cygwinскомпилированная программа должна быть в порядке. Как я уже сказал, CMDтоже хорошо.

UPD: Изначально, из-за ошибки cp65001, я смешивал слои Kernel и CRTL ( UPD²: и API пользовательского режима Windows!). Также: Win8 исправляет одну половину этой ошибки; Я разъяснил раздел о «лучшей консольной» программе и добавил ссылку на то, как это делает Python.

Илья Захаревич
источник
Хорошо, для чего-то такого тщательного, вы заслуживаете того, чтобы быть принятым ответом! Потрясающие!
Vilx-
5
Я новичок в C ++ и не могу понять этот ответ после прочтения внимательно. Может ли кто-нибудь помочь мне с этим или сделать более легкое объяснение?
Рик
@Bachi Благодаря Bachi я обнаружил, что в v73 моей раскладки клавиатуры (упомянутой выше) отсутствуют некоторые файлы поддержки. Сейчас исправлено! (Судя по моим .logфайлам, это неустойчивая ошибка в zip -ruHave нет понятия , как отлаживать его [?]. - или избежать в будущем ...)
Илья Захаревич
@Rick: Точно! Я добавил ссылку на обходной путь в Python (но я не могу найти прямую ссылку на патч прямо сейчас ...).
Илья Захаревич
@IlyaZakharevich: D Спасибо. Но я как-то отказался от использования юникода в Windows. Я собираюсь использовать Linux позже.
Рик
387

Пытаться:

chcp 65001

который изменит кодовую страницу на UTF-8. Также вам необходимо использовать консольные шрифты Lucida.

kgiannakakis
источник
18
Вы знаете, есть ли способ сделать это по умолчанию?
AnnanFay
82
Обратите внимание, что в поддержке кодовой страницы Windows 65001 есть серьезные ошибки реализации, которые могут сломать многие приложения, использующие методы ввода-вывода стандартной библиотеки C, так что это очень хрупко. (Пакетные файлы также просто перестают работать в 65001.) К сожалению, UTF-8 является второсортным гражданином в Windows.
бобинце
7
@bobince У вас есть пример ошибки в поддержке кодовой страницы Windows 65001? Мне любопытно, потому что я никогда не сталкивался с этим, и поиск в Google тоже ничего не поднимал. (Пакетные файлы перестают работать, конечно, но UTF-8 вряд ли является гражданином второго сорта ...)
Роман Старков
17
@romkyns: Насколько я понимаю, вызовы, которые возвращают количество байтов (например, fread / fwrite / etc), на самом деле возвращают количество символов. Это вызывает широкий спектр симптомов, таких как неполное чтение ввода, зависание в fflush, поврежденные командные файлы и так далее. Некоторый фон. Кодовые страницы по умолчанию, используемые для «многобайтовых» локалей CJK, имеют специальную обработку, встроенную, чтобы это исправить, но 65001 нет - она не поддерживается .
bobince
7
Интересный вопрос здесь - это ошибка, потому что она должна сообщать байты и вместо этого сообщать о символах - или потому что приложения, использующие ее, приняли байты = символы неправильно? Другими словами, это сбой API или сбой использования API?
Basic
36

У меня была такая же проблема (я из Чехии). У меня установлена ​​английская версия Windows, и я должен работать с файлами на общем диске. Пути к файлам включают чешские символы.

Решение, которое работает для меня:

В командном файле измените страницу кодировки

Мой пакетный файл:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

Пакетный файл должен быть сохранен в CP 1250.

Обратите внимание, что консоль не будет правильно отображать символы, но будет понимать их ...

Vanna
источник
1
Ура! Мне нужно было это, чтобы я мог ввести символ авторского права в моем командном файле.
Леа Хейс
Это прекрасно сработало и для меня в ситуации, почти идентичной вашей. Вместо того, чтобы содержал мой путь ирландский гэльский символов , т.е. á, é, í, ó, и ú.
Seany84
@vanna, которая решает мои "Турецкие символы и пробелы в пути по проблеме сети". ты замечательный.
caglaror
Также найдите эти ресурсы: msdn.microsoft.com/en-us/library/windows/desktop/… , ss64.com/nt/chcp.html , technet.microsoft.com/en-us/library/bb490874.aspx Турецкий chcp 857
caglaror
2
Возможно, вам просто нужно было использовать другой шрифт, чтобы правильно отображать символы, Lucida Console работала для меня.
Властимил Овчачик
29

Проверьте язык для не-Unicode программ. Если у вас проблемы с русским языком в консоли Windows, вам следует установить русский язык здесь:

Изменение языка для не-Unicode программ

Максим Ефремов
источник
6
Это не включает поддержку Unicode in cmd, оно только переключает кодовую страницу по умолчанию, на cp866которую все еще остается 8-битный набор символов. Он даже использует cp866вместо cp1251которого добавляет свою собственную кучу неприятностей.
ivan_pozdeev
1
Смотрите также мой ответ ниже для новой опции в более новых версиях Windows 10
zvi
14

Изменить кодовую страницу по умолчанию консоли Windows довольно сложно. При поиске в Интернете вы обнаруживаете различные предложения, однако некоторые из них могут полностью сломать Windows, т. Е. Ваш компьютер больше не загружается.

Наиболее безопасное решение это: перейдите в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Command Processorи добавьте строковое значение Autorun= chcp 65001.

Или вы можете использовать этот небольшой пакетный скрипт для наиболее распространенных кодовых страниц.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

Использование @chcp 65001>nulвместо chcp 65001подавления вывода «Активная кодовая страница: 65001» вы будете получать каждый раз, когда запускаете новые окна командной строки.

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

Обратите внимание, что настройки будут применяться только для текущего пользователя. Если вы хотите установить его для всех пользователей, замените строку SET ROOT_KEY="HKEY_CURRENT_USER"наSET ROOT_KEY="HKEY_LOCAL_MACHINE"

Вернфрид Домшайт
источник
хорошая идея и полезный пример тоже!
13

Дело в том, что командная строка на самом деле понимает эти неанглийские символы, просто не может правильно их отображать.

Когда я вписываю путь в командной строке, который содержит некоторые неанглийские символы, он отображается как «?? ?????? ?????». Когда вы отправляете свою команду (в моем случае cd "??? ?????? ?????"), все работает как положено.

пользователь
источник
2
Это, вероятно, немного опасно, так как вы можете получить конфликт имен. Например, если у вас есть два файла, которые отображаются как «???», и вы вводите «cd ???» он не знал бы, что использовать (или, что еще хуже, выбрал бы произвольный).
Джон
26
Вы не вводите ???, вы вводите реальное имя, это просто отображается как ???. Думайте об этом как о поле ввода пароля. Все, что вы вводите, отображается как ***, но отправленный является исходным текстом.
Пользователь
Это действительно работает для команд, запускаемых непосредственно в командной строке. Тем не менее, с запуском .cmdкомандного файла, мне все еще нужно поместить chcp 65001в верхней части командного файла.
Висбуки
В вашем случае это проблема со шрифтом ... контент есть, просто нет подходящего шрифта для его отображения. Но ОП отличается.
WesternGun
11

На компьютере с Windows 10 x64 я заставил командную строку отображать не английские символы:

Откройте командную строку с повышенными правами (запустите CMD.EXE от имени администратора). Запросите в реестре доступные шрифты TrueType для консоли:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

Вы увидите вывод вроде:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

Теперь нам нужно добавить шрифт TrueType, который поддерживает такие символы, как Courier New. Мы делаем это, добавляя нули к имени строки, поэтому в этом случае следующим будет «000»:

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

Теперь мы реализуем поддержку UTF-8:

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

Установите шрифт по умолчанию «Новый курьер»:

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

Установите размер шрифта 20:

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

Включите быстрое редактирование, если вам нравится:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
Алон Или
источник
3
В целом использование кодовой страницы 65001 будет работать без ошибок только в Windows 10 с обновлением Creators. В Windows 7 будут как ошибки вывода, так и ошибки ввода. В Windows 8 и более ранних версиях Windows 10 есть только ошибка ввода, которая ограничивает ввод до 7-битного ASCII.
Eryk Sun
6

Поскольку я не видел полных ответов по Python 2.7, я выделю два важных шага и дополнительный шаг, который весьма полезен.

  1. Вам нужен шрифт с поддержкой Unicode. Windows поставляется с Lucida Console, которую можно выбрать, щелкнув правой кнопкой мыши строку заголовка командной строки и выбрав Defaultsопцию. Это также дает доступ к цветам. Обратите внимание, что вы также можете изменить настройки для командных окон, вызываемых определенными способами (например, открыть здесь, Visual Studio), выбрав Propertiesвместо этого.
  2. Вам необходимо установить кодовую страницу на cp65001, что, по-видимому, является попыткой Microsoft предложить поддержку UTF-7 и UTF-8 для командной строки. Сделайте это, запустив chcp 65001в командной строке . После установки он остается таким до тех пор, пока окно не закроется. Вам нужно будет повторять это каждый раз, когда вы запускаете cmd.exe.

Для более постоянного решения, обратитесь к этому ответу на Супер пользователя. Вкратце, создайте запись REG_SZ(String), используя regedit at, HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorи назовите ее AutoRun. Измените значение этого на chcp 65001. Если вы не хотите видеть выходное сообщение из команды, используйте @chcp 65001>nulвместо этого.

Некоторые программы испытывают трудности при взаимодействии с этой кодировкой, при этом MinGW является заметной ошибкой при компиляции с бессмысленным сообщением об ошибке. Тем не менее, это работает очень хорошо и не вызывает ошибок в большинстве программ.

Aaron3468
источник
5

Я нашел этот метод полезным в новых версиях Windows 10:

Включите эту функцию: «Бета: используйте Unicode UTF-8 для поддержки языков во всем мире»

Панель управления -> Региональные настройки -> Административная вкладка-> Изменить язык системы ...

Настройки региона

Цви
источник
Как этого добиться с помощью powershell или cmd?
Кори
Я пытаюсь отобразить китайские иероглифы в консоли, но это не работает в 64-разрядной версии Windows 10 (установлен на турецком языке, а затем изменен на английский). Далее я попробую установить китайский язык и посмотреть, работает ли он.
akinuri
4

Один из действительно простых вариантов - установить оболочку Windows bash, например MinGW, и использовать ее:

Введите описание изображения здесь

Существует некоторая кривая обучения, так как вам нужно будет использовать функциональность командной строки Unix, но вам понравится ее мощь, и вы можете установить консольный символ UTF-8.

Введите описание изображения здесь

Конечно, вы также получаете все обычные * nix лакомства, такие как grep, find, less и т. Д.

Стив Барнс
источник
В этом (старом) случае проблема заключалась в сценарии, а не в консоли. Решит ли это использование сценариев bash?
Vilx
Да, действительно, они могут быть помечены как UTF-8 как сценарии wood bash и работают с гораздо большей мощностью, чем пакетные файлы Windows - я знаю, что это был старый случай, но я подумал, что этот вариант стоил пометить для дальнейшего использования, так как MS не кажется быть намного лучше в Юникоде.
Стив Барнс
grep , найди и поменьше .
Питер Мортенсен
Вывод символов в кодировке UTF-8 в порядке. Но ввод по-прежнему кодируется системной кодовой страницей.
Рик
1
Просто добавьте, что пользователи Windows могут уже иметь оболочку bash, если вы используете Git: просто откройте окно Git> Git Bash .
скомиса
3

Для аналогичной проблемы, (моя проблема состояла в том, чтобы показать символы UTF-8 из MySQL в командной строке),

Я решил это так:

  1. Я изменил шрифт командной строки на Lucida Console. (Этот шаг не имеет отношения к вашей ситуации. Он связан только с тем, что вы видите на экране, а не с тем, что на самом деле является персонажем).

  2. Я изменил кодовую страницу на Windows-1253. Вы делаете это в командной строке с помощью «chcp 1253». Это сработало для моего случая, когда я хотел увидеть UTF-8.

Christoforos
источник
7
Windws-1253 не является кодовой страницей Unicode. Это стандартная 256-символьная кодовая страница. Очевидно, вы использовали только те символы, которые могут отображаться в этой кодовой странице, но она не будет универсальной.
Vilx-
3

Эта проблема довольно раздражает. У меня обычно есть китайские иероглифы в имени файла и содержимом файла. Обратите внимание, что я использую Windows 10, вот мое решение:

Чтобы отобразить имя файла , например, dirили , lsесли вы установили Ubuntu Баш на Windows 10

  1. Установите регион для поддержки не-UTF 8 символов.

  2. После этого шрифт консоли изменится на шрифт этой локали, а также изменит кодировку консоли.

После того, как вы выполнили предыдущие шаги, чтобы отобразить содержимое файла UTF-8, используя инструмент командной строки

  1. Измените страницу на utf-8 chcp 65001
  2. Перейдите на шрифт, который поддерживает utf-8, например Lucida Console.
  3. Используйте typeкоманду для просмотра содержимого файла, или catесли вы установили Ubuntu Bash в Windows 10
  4. Обратите внимание, что после установки кодировки консоли на utf-8 я не могу вводить китайский символ в cmd, используя китайский метод ввода.

Самое ленивое решение: просто используйте консольный эмулятор, такой как http://cmder.net/

code4j
источник
Это не для меня. Китайские символы в выводе pointкоманды по-прежнему искажены.
Susuching Yu
@SiqingYu Я отказался от сумасшедшей обстановки. Просто используйте blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j
Я использовал Cmder раньше, но он не может заменить консоль разработчика, используемую Visual Studio.
Susuching Yu
@SiqingYu Вы имеете в виду интерактивный PowerShell C #?
code4j
Не интерактивная оболочка Power, а консоль разработчика, также используемая в Visual C ++. Это консоль отладки по умолчанию в проектах консольного приложения Win32.
Susuching Yu
2

Я вижу несколько ответов здесь, но они, кажется, не решают вопрос - пользователь хочет получить Unicode-ввод из командной строки.

Windows использует UTF-16 для кодирования двухбайтовых строк, поэтому вам нужно получить их из ОС в вашей программе. Есть два способа сделать это -

1) Microsoft имеет расширение, которое позволяет main принимать массив широких символов: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Вызвать API Windows, чтобы получить версию командной строки в Unicode. Wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Прочтите это: http://utf8everywhere.org для подробной информации, особенно если вы поддерживаете другие операционные системы.

Роберт Бон
источник
Ах, нет, извините, но вы пропустили вопрос. Это когда я пишу программу, которая будет получать символы Юникода. Мой вопрос был об отправке символов Юникода в другую программу (которая, надеюсь, поддерживает их получение, но у меня действительно нет никакого способа узнать, кроме разборки).
Vilx-
2

Начиная с июня 2019 года, с Windows 10 вам не придется менять кодовую страницу.

См. « Знакомство с терминалом Windows » (от Кайлы Синнамон ) и Microsoft / Терминал .
Благодаря использованию шрифта Consolas будет обеспечена частичная поддержка Unicode.

Как описано в Microsoft/Terminalвыпуске 387 :

В настоящее время в Юникоде насчитывается 87 887 иероглифов. Тебе они тоже нужны?
Нам нужна граница, и символы за этой границей должны обрабатываться резервным шрифтом / связыванием шрифта / чем угодно.

Что Консолас должен покрыть:

  • Символы, используемые в качестве символов, которые используются современными программами OSS в CLI.
  • Эти персонажи должны следовать дизайну и метрикам Консоласа, и должны быть правильно выровнены с существующими персонажами Консоласа

Что Консолас НЕ должен покрывать:

  • Символы и знаки препинания, которые помимо латинского, греческого и кириллического, особенно символов, нуждаются в сложном формировании (например, арабском).
  • Эти символы должны обрабатываться с резервным шрифтом.
VonC
источник
1

Быстрое решение для файлов .bat, если ваш компьютер отображает правильный путь / имя файла при вводе его в DOS-окне:

  1. скопируйте con temp.txt [нажмите Enter]
  2. Введите путь / имя файла [нажмите Enter]
  3. Нажмите Ctrl-Z [нажмите Enter]

Таким образом, вы создаете файл .txt - temp.txt. Откройте его в Блокноте, скопируйте текст (не волнуйтесь, он будет выглядеть нечитаемым) и вставьте его в ваш .bat файл. Выполнение .bat созданного таким образом в DOS-окне работало на меня (кириллица, болгарский).

С. Христов
источник
1

Лучшее, что можно сделать: просто установите доступный бесплатный пакет Microsoft для японского языка. (Другие восточные языковые пакеты также будут работать, но я проверил японский.)

Это дает вам шрифты с большими наборами глифов, делает их поведением по умолчанию, изменяет различные инструменты Windows, такие как cmd, WordPad и т. Д.

Майк Беккерл
источник
1

Изменение кодовой страницы на 1252 работает для меня. Проблема для меня заключается в том, что символ двойного доллара - это преобразование DOS в Windows Server 2008 в другой символ.

Я использовал CHCP 1252 и колпачок перед ним в своем заявлении BCP ^ §.

Мадхав Битра
источник
Спасибо, это работает! Я не знаю, почему люди проголосовали за это, для некоторых это правильная альтернатива. Эта кодовая страница 1252 исправляет проблему и в Windows Server 2012, где тот же код с CP 65001 не работал для меня. Я полагаю, это зависит от того, с какой кодовой страницей был отредактирован пакетный скрипт, или от настроек ОС по умолчанию. В этом случае он был создан с помощью Блокнота на немецком компьютере с многоязыковым пользовательским
Тони Уолл,
0

Я обошел аналогичную проблему удаления файлов с именами в Юникоде, ссылаясь на них в командном файле по их коротким (8 точкам 3) именам.

Короткие имена можно посмотреть, выполнив dir /x. Очевидно, это работает только с именами файлов Unicode, которые уже известны.

Майкл
источник