Як використовувати символи Unicode в командному рядку Windows?


316

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

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


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 усуває 1/2 цих проблем cp65001, але решта все ще застосовна для Win10 .
  • Я працюю в cp1252. Як я вже говорив: Щоб вводити / виводити Unicode в консолі, не потрібно встановлювати сторінку коду .

Деталі

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

Практичні міркування

  • Значення за замовчуванням у вікні не дуже корисні. Для найкращого досвіду слід налаштувати 3 конфігурації:

    • Для виведення: вичерпний шрифт консолі. Для найкращих результатів я рекомендую свої версії . (Вказівки щодо встановлення присутні тут - а також вказані в інших відповідях на цій сторінці.)
    • Для введення: спроможна розкладка клавіатури. Для найкращих результатів я рекомендую свої схеми .
    • Для введення: дозвольте ввести HEX Unicode .
  • Ще одна готча з "Вставкою" в консольний додаток (дуже технічний):

    • Вхід HEX забезпечує символ на KeyUpз 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, щоб змусити працювати "справжні консольні програми". Це, безумовно, працює для прикладних програм для іграшок; в реальному житті це може може не вирішити ваші конкретні проблеми. Експеримент.)

Підсумок

  • встановити шрифт, розкладку клавіатури (і, можливо, дозволити введення HEX).

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

UPD: Спочатку для помилки cp65001я змішував шари ядра та CRTL ( UPD²: та API в режимі користувача Windows!). Також: Win8 виправляє половину цієї помилки; Я пояснив розділ про «кращу консоль» програми та додав посилання на те, як це робить Python.


Гаразд, за щось таке ґрунтовне, ти заслуговуєш на те, щоб прийняти відповідь! Дивовижно!
Vilx-

5
Я новачок на C ++ і не можу зрозуміти цю відповідь після уважного прочитання. Чи може хтось мені допомогти з цього приводу чи зробити простіше пояснення?
Рік

@Bachi Завдяки Bachi я дізнався, що v73 моєї розкладки клавіатури (згаданий вище) відсутні деякі файли підтримки. Тепер виправлено! (Судячи з моїх .logфайлів, це невпинна помилка в zip -ru[?!]. Не маєте поняття, як її налагодити - чи уникнути в майбутньому…)
Ілля Захаревич

@Rick: Правильно! Я додав посилання на вирішення проблеми в Python (але прямого посилання на патч я зараз не можу знайти…).
Ілля Захаревич

@IlyaZakharevich: D Дякую Але я якось відмовляюся від використання unicode в Windows. Пізніше я буду використовувати Linux.
Рік

387

Спробуйте:

chcp 65001

яка змінить сторінку коду на UTF-8. Також вам потрібно використовувати шрифти консолі Lucida.


18
Чи знаєте ви, чи існує спосіб зробити це за замовчуванням?
AnnanFay

82
Зауважте, що на кодовій сторінці 65001 Windows кодова версія Windows має серйозні помилки, що дозволить зламати багато додатків, які покладаються на стандартні методи виводу бібліотеки С, тому це дуже крихко. (Пакетні файли також просто перестають працювати в 65001.) На жаль, UTF-8 є громадянином другого класу в Windows.
bobince

7
@bobince У вас є приклад помилки на кодовій сторінці Windows 65001? Мені цікаво, тому що я ніколи не стикався з цим, і Гуглінг теж нічого не піднімав. (Пакетні файли, звичайно, перестають працювати, але UTF-8 навряд чи є громадянином другого класу ...)
Роман Старков

17
@romkyns: Я розумію, що дзвінки, що повертають число байтів (наприклад, fread / fwrite / тощо), насправді повертають число символів. Це викликає найрізноманітніші симптоми, такі як неповне введення-читання, зависання в флеш, пошкоджені пакетні файли тощо. Якесь тло. Сторінки коду за замовчуванням, які використовуються для "багатобайтових" мов CJK, мають вбудовану спеціальну обробку, щоб виправити це, але 65001 ні - це не підтримується .
bobince

7
Тут цікаве питання - це помилка через те, що вона повинна повідомляти про байти та замість цього звітувати про символи - або тому, що програми, що використовують її, неправильно припустили байти = символи? Іншими словами, це збій в API або використання API?
Основні

36

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

Для мене це рішення:

У пакетному файлі змініть сторінку діаграм

Мій пакетний файл:

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

Пакетний файл повинен бути збережений у CP 1250.

Зауважте, що консоль не відображатиме символів правильно, але вона їх зрозуміє ...


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 працювала на мене.
Властиміл Овчачик

29

Перевірте мову для програм, які не є Unicode. Якщо у вас є проблеми з російською мовою в консолі Windows, вам слід встановити тут російську мову:

Зміна мови для програм Unicode


6
Це не дозволяє підтримати Unicode в cmd, але він перемикає лише кодову сторінку за замовчуванням, до cp866якої ще є 8-бітний набір символів. Він навіть використовує, cp866замість cp1251чого додає власний набір проблем.
ivan_pozdeev

1
Дивіться також мені відповідь нижче щодо нової опції в новіших версіях Windows 10
zvi

14

Змінити стандартну кодову сторінку консолі Windows досить складно. Під час пошуку в Інтернеті ви знайдете різні пропозиції, проте деякі з них можуть повністю зламати вашу Windows, тобто ваш ПК вже не завантажується.

Найбільш безпечне рішення - це: перейдіть до свого ключа реєстру HKEY_CURRENT_USER\Software\Microsoft\Command Processorта додайте значення String Autorun= chcp 65001.

Або ви можете використовувати цей невеликий Batch-скрипт для найпоширеніших сторінок коду.

@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верхню частину пакетного файлу.
wisbucky

У вашому випадку це проблема з шрифтом ... вміст є, просто немає належного шрифту для його відображення. Але ОП відрізняється.
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

Встановіть шрифт за замовчуванням на "Courier New":

    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.
Ерик Нд

6

Оскільки я не бачив жодної повної відповіді на Python 2.7, я викладу два важливі кроки та необов'язковий крок, який є досить корисним.

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

Щоб отримати більш постійне рішення, зверніться до цієї відповіді на Super User. Коротше кажучи, створіть REG_SZ(String) запис за допомогою regedit at HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorта назви його AutoRun. Змініть значення на chcp 65001. Якщо ви не хочете бачити вихідне повідомлення з команди, використовуйте @chcp 65001>nulзамість цього.

Деякі програми мають проблеми з взаємодією з цим кодуванням, що MinGW є помітною, яка виходить з ладу під час компіляції з безглуздим повідомленням про помилку. Тим не менш, це працює дуже добре і не викликає помилок у більшості програм.


5

Я знайшов цей метод корисним у нових версіях Windows 10:

Увімкніть цю функцію: "Бета-версія: Використовуйте Unicode UTF-8 для підтримки мови у всьому світі"

Панель управління -> Регіональні налаштування -> Вкладка Адміністратор-> Змінити локальну систему ...

Налаштування регіону


Як цього досягти, використовуючи powerhell або cmd?
Корі

Я намагаюся відобразити китайські символи в консолі, і це не спрацювало в Windows 10 64-розрядному (Встановлено турецькою та пізніше змінено на англійську). Далі я спробую встановити китайську мову і побачити, чи працює вона.
akinuri

4

Один з дійсно простих варіантів - встановити оболонку Windows, наприклад MinGW, і використовувати це:

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

Існує трохи кривої навчання, оскільки вам потрібно буде використовувати функцію командного рядка Unix, але вам сподобається сила її і ви можете встановити символ консолі, встановлений на UTF-8.

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

Звичайно, ви також отримуєте всі звичні * nix смаколики, такі як grep, find, менше тощо.


У цьому (старому) випадку проблема стосувалася сценарію, а не консолі. Чи вирішить це використання bash-скриптів?
Vilx-

Так, насправді сценарії з дерев’яних файлів можуть бути позначені як UTF-8 і просто працювати з набагато більшою потужністю, ніж пакетні файли Windows - я знаю, що це був старий випадок, але думав, що цей варіант вартий позначення для подальшого ознайомлення, оскільки MS не здається щоб стало набагато краще в Unicode.
Стів Барнс


Виведення символів, кодованих UTF-8, добре. Але вхід все ще кодується системною кодовою сторінкою.
Рік

1
Просто додамо, що користувачі Windows вже можуть мати оболонку bash, якщо ви використовуєте Git: просто відкрийте вікно Git> Git Bash .
skomisa

3

Для подібної проблеми (моя проблема полягала в тому, щоб показати командні символи UTF-8 з MySQL в командному рядку),

Я вирішив це так:

  1. Я змінив шрифт командного рядка на консоль Lucida. (Цей крок повинен бути неактуальним для вашої ситуації. Він має стосуватися лише того, що ви бачите на екрані, а не з тим, що насправді є персонажем).

  2. Я змінив кодову сторінку на Windows-1253. Ви робите це в командному рядку "chcp 1253". Це працювало для мого випадку, коли я хотів бачити UTF-8.


7
Windws-1253 не є кодовою сторінкою Unicode. Це стандартна кодова сторінка на 256 символів. Мабуть, ви використовували лише символи, які можуть відображатися на цій кодовій сторінці, але це не буде універсальним.
Vilx-

3

Ця проблема досить дратує. Зазвичай у моєму файлі та вмісті файлу є китайський символ. Зауважте, що я використовую Windows 10, ось моє рішення:

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

  1. Встановіть регіон, щоб він підтримував 8 символів, які не є utf.

  2. Після цього шрифт консолі буде змінено на шрифт цієї локалі, а також змінить кодування консолі.

Після виконання попередніх кроків для відображення вмісту файлу файлу UTF-8 за допомогою інструмента командного рядка

  1. Змініть сторінку на utf-8 на chcp 65001
  2. Перейдіть на шрифт, який підтримує utf-8, наприклад, консоль Lucida
  3. Використовуйте typeкоманду, щоб заглянути в вміст файлу, або catякщо ви встановили Ubuntu bash в Windows 10
  4. Зверніть увагу, що після встановлення кодування консолі на utf-8, я не можу вводити китайський символ у cmd, використовуючи китайський метод введення.

Найбільш ледаче рішення: просто використовуйте консольний емулятор, наприклад http://cmder.net/


Це не для мене. Китайські ієрогліфи у висновку pointкоманди все ще вбрані.
Ssuching Yu

@SiqingYu Я відмовляюся від божевільної установки. Просто використовуйте blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j

Раніше я використовував Cmder, але він не може замінити консоль розробника, яку використовує Visual Studio.
Ssuching Yu

@SiqingYu Ви маєте на увазі інтерактивну оболонку c #?
code4j

Не інтерактивна оболонка живлення, але консоль розробника, яку також використовує Visual C ++. Це консоль налагодження за замовчуванням у проектах програми Win32 Console Application.
Ssuching 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) Викличте windows api, щоб отримати версію 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 для отримання детальної інформації, особливо якщо ви підтримуєте інші операційні системи.


Ах, ні, вибачте, але ви пропустили питання. Це коли я пишу програму , яка буде отримувати символи Юнікоду. Моє запитання стосувалося надсилання символів Unicode в іншу програму (яка, сподіваємось, підтримує їх отримання, але я справді не можу знати, крім розбирання).
Vilx-

2

Починаючи з червня 2019 року, для Windows 10 вам не доведеться змінювати кодову сторінку.

Див. " Представлення терміналу Windows " (від Kayla Cinnamon ) та Microsoft / Terminal .
Завдяки використанню шрифту Consolas буде надана часткова підтримка Unicode.

Як задокументовано у Microsoft/Terminalвипуску 387 :

В даний час в Unicode є 87 877 ідеографів. Вам вони теж потрібні?
Нам потрібна межа, і символи, що знаходяться за цією межею, повинні оброблятися за допомогою резервного шрифту / посилання шрифту / будь-якого іншого.

Що повинні охоплювати консолі:

  • Символи, які використовуються як символи, які використовуються сучасними програмами OSS в CLI.
  • Ці символи повинні відповідати дизайну та метрикам консолей та правильно їх узгоджувати з існуючими символами консолей.

Що консолі НЕ повинні охоплювати:

  • Символи та пунктуація сценаріїв, які виходять за межі латинської, грецької та кирилицької, особливо символів, потребують складного формування (наприклад, арабською).
  • З цими символами слід обробляти резервний шрифт.

1

Швидке рішення для файлів .bat, якщо комп'ютер відображає правильний шлях / ім’я файлу під час введення його у вікні DOS:

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

Таким чином ви створюєте .txt файл - temp.txt. Відкрийте його в Блокноті, скопіюйте текст (не хвилюйтесь, що він буде нечитабельним) та вставте його у свій .bat файл. Виконання .bat, створеного таким чином, у DOS-вікні працювало на mе (кирилиця, болгарська).


1

Що краще зробити: просто встановіть доступний, безкоштовний, японський мовний пакет Microsoft. (Інші мовні пакети для східної мови також працюватимуть, але я випробував японський.)

Це дає вам шрифти з більшими наборами гліфів, робить їх поведінкою за замовчуванням, змінює різні інструменти Windows, такі як cmd, WordPad тощо.


1

Зміна кодової сторінки на 1252 працює для мене. Проблема для мене полягає в тому, що символ подвійного долера § перетворюється на інший символ DOS на Windows Server 2008.

Я використовував CHCP 1252 та шапку перед цим у своєму заяві BCP ^ §.


Спасибі це працює! Я не знаю, чому люди проголосували за це, це є дійсною альтернативою для деяких людей. Ця кодова сторінка 1252 виправляє проблему також у Windows Server 2012, де той самий код із CP 65001 не працював для мене. Я думаю, це залежить від того, з якою кодовою сторінкою був відредагований пакетний скрипт, або ОС за замовчуванням. У цьому випадку він був створений за допомогою блокнота на німецькій машині MUI з базовою ОС США.
Tony Wall

0

У мене виникла подібна проблема видалення файлів з ім'ям Unicode, посилаючись на них у пакетному файлі за їх короткими (8 крапками 3) іменами.

Короткі імена можна переглянути, виконавши dir /x. Очевидно, що це працює лише з іменами файлів Unicode, які вже відомі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.