109

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

Запуск chcp 65001 в командной строке перед использованием каких-либо инструментов помогает, но есть ли способ установить его как кодовую страницу по умолчанию?

Обновить:

Изменение значения HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP на 65001 приводит к невозможности загрузки системы в моем случае.

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

5 ответов5

86

Чтобы изменить кодовую страницу только для консоли, выполните следующие действия:

  1. Пуск -> Выполнить -> regedit
  2. Перейдите в [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Измените значение на chcp 65001
36

Лично мне не нравится смена реестра. Это может вызвать много проблем. Я создал командный файл:

@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

Вуаля, когда мне нужно набрать UTF-8, я использую эту ссылку.

28

Рег файл:

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
4

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

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

Это не требует редактирования реестра и, в отличие от редактирования ярлыка, будет работать, если PowerShell запускается в определенной папке с помощью контекстного меню проводника Windows.

4

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

  1. Щелкните правой кнопкой мыши значок Powershell в меню "Пуск" и выберите "Дополнительно"> "Расположение файла".
  2. Щелкните правой кнопкой мыши ярлык Powershell и выберите "Свойства".
  3. Добавьте следующее в конец командной строки "Target": -NoExit -Command "chcp 1252"

Будь счастлив. Не суетитесь с реестром Windows, если у вас нет другого выбора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .