У нас есть проект в Team Foundation Server (TFS), в котором есть не английский символ (š). При попытке написать несколько вещей, связанных со сборкой, мы столкнулись с проблемой - мы не можем передать букву š инструментам командной строки. Командная строка или что-то еще портит ее, и утилита tf.exe не может найти указанный проект.
Я пробовал разные форматы для .bat-файла (ANSI, UTF-8 с и без спецификации ), а также создавал сценарии в JavaScript (что по сути является Unicode) - но не повезло. Как мне выполнить программу и передать ей командную строку Unicode ?
Ответы:
Мой опыт: я использую ввод / вывод Unicode в консоли в течение многих лет (и делаю это много раз в день. Более того, я разрабатываю инструменты поддержки именно для этой задачи). Существует очень мало проблем, насколько вы понимаете следующие факты / ограничения:
CMD
и «консоль» являются несвязанными факторами.CMD.exe
это просто одна из программ, которые готовы «работать внутри» консоли («консольные приложения»).CMD
имеет отличную поддержку Unicode; Вы можете вводить / выводить все символы Unicode, когда активна любая кодовая страница.chcp 65001
это очень опасно. Если программа не была специально разработана для обхода дефектов в API Windows (или не использует библиотеку времени выполнения C, которая имеет эти обходные пути), она не будет работать надежно. Win8 исправляет половину этих проблемcp65001
, но остальное все еще применимо к Win10 .cp1252
. Как я уже сказал: для ввода / вывода Unicode в консоли не нужно устанавливать кодовую страницу .Детали
File-I/O
API, аConsole-I/O
API. (Например, посмотрите, как это делает Python .)U+10000
). Поддерживается только простая отрисовка текста (поэтому европейские и некоторые восточноазиатские языки должны нормально работать, если используются предварительно составленные формы). [Здесь есть мелкий мелкий шрифт для восточной азии и для символов U + 0000, U + 0001, U + 30FB.]Практические соображения
Значения по умолчанию для Window не очень полезны. Для лучшего опыта нужно настроить 3 части конфигурации:
Еще одна ошибка с «Вставкой» в консольное приложение (очень техническое):
KeyUp
ofAlt
; все остальные способы доставки персонажа происходятKeyDown
; так много приложений не готовы видеть персонажа наKeyUp
. (Применимо только к приложениям, использующимConsole-I/O
API.)Ctrl-Alt-AltGr-Kana-Shift-Gray*
), то он доставляется с помощью эмулируемого нажатия клавиши. Это то, что ожидает любое приложение - так что вставка всего, что содержит только такие символы, это хорошо.Вывод : если ваша раскладка клавиатура поддерживает ввод много символов без ключей приставки, некоторые приложения багги может пропустить символыкогда вы
Paste
через интерфейс Консоли:Alt-Space E P
. ( Вот почему я рекомендую использовать раскладки клавиатуры!)Следует также помнить, что «альтернативные,« более функциональные »консоли» для Windows вовсе не являются консолями . Они не поддерживают
Console-I/O
API, поэтому программы, которые используют эти API, не будут работать. (Программы, которые используют только «API-интерфейсы файлового ввода-вывода для файловых дескрипторов консоли», будут работать нормально.)Одним из примеров таких не консольных является частью MicroSoft
Powershell
. Я не использую это; чтобы экспериментировать, нажмите и отпуститеWinKey
, затем введитеpowershell
.(С другой стороны, существуют программы, такие как
ConEmu
илиANSICON
которые пытаются сделать больше: они «пытаются» перехватитьConsole-I/O
API, чтобы заставить «настоящие консольные приложения» работать тоже. Это определенно работает для игрушечных примеров программ; в реальной жизни это может или может не решить ваши конкретные проблемы. Эксперимент.)Резюме
установить шрифт, раскладку клавиатуры (и при желании разрешить ввод в шестнадцатеричном формате).
используйте только программы, которые проходят через
Console-I/O
API и принимают аргументы командной строки Unicode. Например, любаяcygwin
скомпилированная программа должна быть в порядке. Как я уже сказал,CMD
тоже хорошо.UPD: Изначально, из-за ошибки
cp65001
, я смешивал слои Kernel и CRTL ( UPD²: и API пользовательского режима Windows!). Также: Win8 исправляет одну половину этой ошибки; Я разъяснил раздел о «лучшей консольной» программе и добавил ссылку на то, как это делает Python.источник
.log
файлам, это неустойчивая ошибка вzip -ru
Have нет понятия , как отлаживать его [?]. - или избежать в будущем ...)Пытаться:
который изменит кодовую страницу на UTF-8. Также вам необходимо использовать консольные шрифты Lucida.
источник
У меня была такая же проблема (я из Чехии). У меня установлена английская версия Windows, и я должен работать с файлами на общем диске. Пути к файлам включают чешские символы.
Решение, которое работает для меня:
В командном файле измените страницу кодировки
Мой пакетный файл:
Пакетный файл должен быть сохранен в CP 1250.
Обратите внимание, что консоль не будет правильно отображать символы, но будет понимать их ...
источник
á
,é
,í
,ó
, иú
.Проверьте язык для не-Unicode программ. Если у вас проблемы с русским языком в консоли Windows, вам следует установить русский язык здесь:
источник
cmd
, оно только переключает кодовую страницу по умолчанию, наcp866
которую все еще остается 8-битный набор символов. Он даже используетcp866
вместоcp1251
которого добавляет свою собственную кучу неприятностей.Изменить кодовую страницу по умолчанию консоли Windows довольно сложно. При поиске в Интернете вы обнаруживаете различные предложения, однако некоторые из них могут полностью сломать Windows, т. Е. Ваш компьютер больше не загружается.
Наиболее безопасное решение это: перейдите в раздел реестра
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
и добавьте строковое значениеAutorun
=chcp 65001
.Или вы можете использовать этот небольшой пакетный скрипт для наиболее распространенных кодовых страниц.
Использование
@chcp 65001>nul
вместоchcp 65001
подавления вывода «Активная кодовая страница: 65001» вы будете получать каждый раз, когда запускаете новые окна командной строки.Полный список всех доступных номеров вы можете получить из идентификаторов кодовых страниц
Обратите внимание, что настройки будут применяться только для текущего пользователя. Если вы хотите установить его для всех пользователей, замените строку
SET ROOT_KEY="HKEY_CURRENT_USER"
наSET ROOT_KEY="HKEY_LOCAL_MACHINE"
источник
Дело в том, что командная строка на самом деле понимает эти неанглийские символы, просто не может правильно их отображать.
Когда я вписываю путь в командной строке, который содержит некоторые неанглийские символы, он отображается как «?? ?????? ?????». Когда вы отправляете свою команду (в моем случае cd "??? ?????? ?????"), все работает как положено.
источник
.cmd
командного файла, мне все еще нужно поместитьchcp 65001
в верхней части командного файла.На компьютере с Windows 10 x64 я заставил командную строку отображать не английские символы:
Откройте командную строку с повышенными правами (запустите CMD.EXE от имени администратора). Запросите в реестре доступные шрифты TrueType для консоли:
Вы увидите вывод вроде:
Теперь нам нужно добавить шрифт TrueType, который поддерживает такие символы, как Courier New. Мы делаем это, добавляя нули к имени строки, поэтому в этом случае следующим будет «000»:
Теперь мы реализуем поддержку UTF-8:
Установите шрифт по умолчанию «Новый курьер»:
Установите размер шрифта 20:
Включите быстрое редактирование, если вам нравится:
источник
Поскольку я не видел полных ответов по Python 2.7, я выделю два важных шага и дополнительный шаг, который весьма полезен.
Defaults
опцию. Это также дает доступ к цветам. Обратите внимание, что вы также можете изменить настройки для командных окон, вызываемых определенными способами (например, открыть здесь, Visual Studio), выбравProperties
вместо этого.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 является заметной ошибкой при компиляции с бессмысленным сообщением об ошибке. Тем не менее, это работает очень хорошо и не вызывает ошибок в большинстве программ.
источник
Я нашел этот метод полезным в новых версиях Windows 10:
Включите эту функцию: «Бета: используйте Unicode UTF-8 для поддержки языков во всем мире»
источник
Один из действительно простых вариантов - установить оболочку Windows bash, например MinGW, и использовать ее:
Существует некоторая кривая обучения, так как вам нужно будет использовать функциональность командной строки Unix, но вам понравится ее мощь, и вы можете установить консольный символ UTF-8.
Конечно, вы также получаете все обычные * nix лакомства, такие как grep, find, less и т. Д.
источник
Для аналогичной проблемы, (моя проблема состояла в том, чтобы показать символы UTF-8 из MySQL в командной строке),
Я решил это так:
Я изменил шрифт командной строки на Lucida Console. (Этот шаг не имеет отношения к вашей ситуации. Он связан только с тем, что вы видите на экране, а не с тем, что на самом деле является персонажем).
Я изменил кодовую страницу на Windows-1253. Вы делаете это в командной строке с помощью «chcp 1253». Это сработало для моего случая, когда я хотел увидеть UTF-8.
источник
Эта проблема довольно раздражает. У меня обычно есть китайские иероглифы в имени файла и содержимом файла. Обратите внимание, что я использую Windows 10, вот мое решение:
Чтобы отобразить имя файла , например,
dir
или ,ls
если вы установили Ubuntu Баш на Windows 10Установите регион для поддержки не-UTF 8 символов.
После этого шрифт консоли изменится на шрифт этой локали, а также изменит кодировку консоли.
После того, как вы выполнили предыдущие шаги, чтобы отобразить содержимое файла UTF-8, используя инструмент командной строки
chcp 65001
type
команду для просмотра содержимого файла, илиcat
если вы установили Ubuntu Bash в Windows 10Самое ленивое решение: просто используйте консольный эмулятор, такой как http://cmder.net/
источник
point
команды по-прежнему искажены.Я вижу несколько ответов здесь, но они, кажется, не решают вопрос - пользователь хочет получить 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 для подробной информации, особенно если вы поддерживаете другие операционные системы.
источник
Начиная с июня 2019 года, с Windows 10 вам не придется менять кодовую страницу.
См. « Знакомство с терминалом Windows » (от Кайлы Синнамон ) и Microsoft / Терминал .
Благодаря использованию шрифта Consolas будет обеспечена частичная поддержка Unicode.
Как описано в
Microsoft/Terminal
выпуске 387 :источник
Быстрое решение для файлов .bat, если ваш компьютер отображает правильный путь / имя файла при вводе его в DOS-окне:
Таким образом, вы создаете файл .txt - temp.txt. Откройте его в Блокноте, скопируйте текст (не волнуйтесь, он будет выглядеть нечитаемым) и вставьте его в ваш .bat файл. Выполнение .bat созданного таким образом в DOS-окне работало на меня (кириллица, болгарский).
источник
Лучшее, что можно сделать: просто установите доступный бесплатный пакет Microsoft для японского языка. (Другие восточные языковые пакеты также будут работать, но я проверил японский.)
Это дает вам шрифты с большими наборами глифов, делает их поведением по умолчанию, изменяет различные инструменты Windows, такие как cmd, WordPad и т. Д.
источник
Изменение кодовой страницы на 1252 работает для меня. Проблема для меня заключается в том, что символ двойного доллара - это преобразование DOS в Windows Server 2008 в другой символ.
Я использовал CHCP 1252 и колпачок перед ним в своем заявлении BCP ^ §.
источник
Я обошел аналогичную проблему удаления файлов с именами в Юникоде, ссылаясь на них в командном файле по их коротким (8 точкам 3) именам.
Короткие имена можно посмотреть, выполнив
dir /x
. Очевидно, это работает только с именами файлов Unicode, которые уже известны.источник