Змініть кодову сторінку консолі Windows за замовчуванням на UTF-8


123

В даний час я працюю під Windows 7 x64 і, як правило, я хочу, щоб усі консольні інструменти працювали з UTF-8, а не з кодовою сторінкою 850 за замовчуванням.

Запуск chcp 65001у командному рядку до використання будь-яких інструментів допомагає, але чи можна встановити як кодову сторінку за замовчуванням?

Оновлення:

Зміна HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPзначення, яке 65001відображатиметься, щоб система не могла завантажуватися в моєму випадку

Пропонована зміна HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunна @chcp 65001>nulслугувала добре для моєї мети. (спасибі Ole_Brun )


Зауважте, що цільове рішення може зламати Windows 'find.exe (що спричинить проблеми зі складанням SDK для Android): superuser.com/questions/176737/…
J Rao

Гм, коли я використовую chcp 65001, мої консольні вікна виходять з ладу, коли я роблю реж, але це допомагає просто запустити cmd.exe прапором / u (nb: він використовує unicode ним, не відображається у виході chcp.com)
eckes

10
Консоль Windows пронизана помилками, коли кодування встановлено на непідтримувану багатобайтову кодову сторінку, наприклад 65001. Будь-яке програмне забезпечення, що використовує підрахунок виходів API Win32 WriteFile / ReadFile, отримає помилкові результати, і, отже, такі речі будуватимуться на таких, як MSVCRT Реалізація stdlib призведе до збитого / повторного виходу та зависання на вході, коли стикається з не-ASCII. Поки MS не вирішить її виправити - і це вже десятиліття, коли цього не спостерігається - глобальна зміна кодової сторінки консолі на 65001 - надзвичайно погана ідея .
bobince

2
Будь-яке використання Aверсій функцій Windows порушено. Для використання Wверсій потрібно перенести весь код .
Демі

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPвикористовується як резервна копія для середовищ unicode (non-utf), очевидно, ви намагаєтеся примусити його до 'unicode', як ви бачите, що це суперечка за визначенням. Windows зависає, ймовірно, тому, що деякі системні речі під час завантаження залежать від роботи, яка не працює унікодом.
venimus

Відповіді:


99

Щоб змінити кодову сторінку лише для консолі, виконайте наступне:

  1. Початок -> Виконати -> regedit
  2. Йти до [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Змініть значення на chcp 65001

1
@Regent У запитанні значення реєстру, яке ви згадали, яке працювало на вас, є @chcp 65001>nul, хоча у цій прийнятій відповіді воно є chcp 65001. Які відмінності між ними?
galacticninja

7
Якщо просто встановити @galacticninja chcp 65001, кожен відкритий командний рядок надрукує "Активна сторінка коду: 65001", але @chcp 65001>nulзапобіжить будь-який вихід.
регент

7
Autorunне існує для мене під Windows 8.1.
kleinfreund

2
@kleinfreund @Luke: якщо Autorunйого немає, ви можете додати нове значення рядка із вмістом@chcp 65001>nul
Dacto

1
@ Dr.jacky Не впевнений, що саме вони означають під небезпечним. Я щойно відповів на питання ОП. Чи варто вам це робити чи ні, це інше питання. Я вважаю, що з Python можуть виникнути проблеми, тому ви можете перевірити це, перш ніж встановити кодову сторінку на рівні 65001.
Нільс Магне Лунде

38

Особисто мені не подобається змінювати реєстр. Це може спричинити масу проблем. Я створив пакетний файл:

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS

Збережено в C:\Windows\System32як switch.bat.

Я створив посилання для cmd.exe на робочому столі.

У властивостях ярлика cmd змінено призначення на: C:\Windows\System32\cmd.exe /k switch

Voilá, коли мені потрібно набрати UTF-8, я використовую це посилання.


7
Зверніть увагу, що він буде надрукований Active code page: 65001у stdout. Тож якщо ви робите щось подібне, CHCP 65001 && mycommand.exeтоді ви отримаєте кодова сторінку, роздруковану на початку. Вам потрібноCHCP 65001 >nul && mycommand.exe
frumbert

32

Рег-файл:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Значення повинно бути в шістнадцятковій формі
  2. Верхній рядок повинен міститись так, як є
  3. HKEY_CURRENT_USER не можна скорочувати
  4. не можна опустити слово

Командний рядок:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Значення може бути в декадах або шістнадцятковому
  2. % SystemRoot% необхідно уникнути
  3. REG_DWORD не можна опустити

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Значення може бути в декадах або шістнадцятковому
  2. -Type DWord передбачається з PowerShell 3+
  3. Можна використовувати ni -> New-Item
  4. Можна використовувати sp -> Set-ItemProperty
  5. Можна використовувати -ea 0 -> -ErrorAction Ignore

Cygwin:

regtool add '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe'
regtool set '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage' 65001
  1. Значення може бути в декадах або шістнадцятковому
  2. Можна використовувати / -> \
  3. Можна використовувати HKCU -> HKEY_CURRENT_USER
  4. Можна використовувати user -> HKEY_CURRENT_USER

Не працювало в Windows 10. Що працює, це створити автозапуск, який встановлює кодову сторінку за допомогою команди chcp. Наприклад,
Джордж

Що я мав намір сказати перед грубо вичерпаним редагуванням, chcp 65001це видайте у командному файлі автозапуску. Дивіться stackoverflow.com/a/17405182/315083
Джордж

Справа в тому, що він працює лише для CMD, але не для консолі сам по собі.
AnrDaemon

5

Команда зміни кодової сторінки є chcp <codepage>. Приклад: chcp 1252. Введіть його у вікно Powershell. Щоб уникнути клопоту вводити його щоразу (якщо вам завжди потрібно змінювати кодову сторінку), ви можете додати її до командного рядка програми. Для цього виконайте наступні дії:

  1. Клацніть правою кнопкою миші піктограму Powershell у меню "Пуск" та виберіть "Додатково"> "Відкрити розташування файлу".
  2. Клацніть правою кнопкою миші ярлик Powershell і виберіть "Властивості".
  3. Додайте наступне до кінця командного рядка "Ціль": -NoExit -Command "chcp 1252"

Будь щасливий. Не метушіться з реєстром Windows, якщо у вас немає іншого вибору.


Цей прекрасно працював для мене. -NoExit -Command "chcp 1252 > null"також на початку пропускає повідомлення про вибрану кодову сторінку.
CodeMonkey

5

Це можна зробити, створивши профіль PowerShell і додавши до нього команду "chcp 65001> $ null":

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile

Для цього не потрібно редагувати реєстр, і, на відміну від редагування ярлика, буде працювати, якщо PowerShell запускається в певній папці за допомогою контекстного меню Windows Explorer.


1
@PimpJuiceIT, ні .. дивіться перший рядок цієї відповіді.
Дакто

4

У 1809 збірці Windows 10 мені вдалося назавжди вирішити це, перейшовши до системи Language settings, вибравши Administrative language settings, клацнувши Change system locale...та встановивши Beta: Use Unicode UTF-8 for worldwide language supportпрапорець, а потім перезавантаживши ПК.

Це стосується всіх програм, навіть тих, які я не починаю з командного рядка!
(Що для мене було необхідним, оскільки я намагався редагувати код Agda з Atom.)

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