Как использовать символы Юникода в командной строке Windows? - PullRequest
292 голосов
/ 23 декабря 2008

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

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

Ответы [ 19 ]

2 голосов
/ 14 апреля 2019

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

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

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

Region Settings

2 голосов
/ 22 января 2017

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

Для отображения имени файла , например dir или ls, если вы установили Ubuntu bash в Windows 10

  1. Установите для региона поддержку не-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/

1 голос
/ 06 мая 2019

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

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

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

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

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

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

То, что Консолас не должен покрывать:

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

Я вижу несколько ответов здесь, но, похоже, они не отвечают на этот вопрос - пользователь хочет получить 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 для получения подробной информации, особенно если вы поддерживаете другие операционные системы.

1 голос
/ 09 апреля 2015

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

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

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

1 голос
/ 12 февраля 2015

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

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

1 голос
/ 31 мая 2013

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

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

0 голосов
/ 02 декабря 2015

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

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

0 голосов
/ 14 февраля 2014

до utf-8: chcp 65001

Вернуться к настройкам по умолчанию: chcp 437

...