題 將Windows控制台的默認代碼頁更改為UTF-8


目前我正在運行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


104
2018-04-12 10:42


起源


請注意,目的解決方案可能會破壞Windows的find.exe(這會導致Android SDK構建出現問題): superuser.com/questions/176737/... - J Rao
嗯,當我使用chcp 65001時,我的控制台窗口崩潰時,我做dir,但它有助於簡單地啟動帶有/ u標誌的cmd.exe(nb:它確實使用unicode,它沒有反映在chcp.com輸出中) - eckes
使用UTF-8代碼頁也打破了 more 命令(它給出了誤導性的錯誤信息 Not enough memory.用。打開命令提示符 /U 開關沒有幫助。 - Synetech
當編碼設置為不支持的多字節代碼頁(例如65001)時,Windows控制台充滿了錯誤。任何使用Win32 WriteFile / ReadFile API的輸出計數的軟件都會得到錯誤的結果,因此像MSVCRT那樣建立在其上的東西當面對非ASCII時,stdlib的實現將產生損壞/重複輸出並掛起輸入。直到MS開始修復它 - 並且幾十年來沒有發生這種情況的跡象 - 全局改變控制台代碼頁到65001是一個 非常糟糕的主意。 - bobince
任何使用的 A Windows功能的版本被破壞了。  所有代碼都需要移植才能使用 W 版本。 - Demi


答案:


要僅更改控制台的代碼頁,請執行以下操作:

  1. 開始 - >運行 - > regedit
  2. [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. 將值更改為 chcp 65001

80
2018-04-12 12:22



請注意,更改代碼頁不僅會影響控制台。要使它只適用於控制台,你可以把它 chcp 65001 進入 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun。 - Nils Magne Lunde
令人驚訝地改變了 OEMCP 註冊表設置使我的系統無法啟動所以我不得不使用系統恢復恢復到工作狀態。 Autorun 但是,這樣做了。 - Regent
@Regent:如果此解決方案使您的系統無法啟動,為什麼將其標記為已接受,那麼? - Tim Pietzcker
@galacticninja簡單地說 chcp 65001 將導致每個打開的命令提示符打印“活動代碼頁:65001” @chcp 65001>nul 會阻止任何輸出。 - Regent
Autorun 在Windows 8.1下我不在場。 - kleinfreund


我不喜歡改變系統。這給我帶來了很多問題。我創建了一個批處理文件:

@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時,我使用這個鏈接。


33
2017-12-07 15:36



請注意,它將打印 Active code page: 65001 到stdout。所以,如果你正在做類似的事情 CHCP 65001 && mycommand.exe 那麼你將在開始時打印出代碼頁。你需要 CHCP 65001 >nul && mycommand.exe - frumbert


註冊文件:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. 值必須為十六進制
  2. 頂線必須完全按原樣包括在內
  3. HKEY_CURRENT_USER不能縮寫
  4. dword不能省略

命令提示符:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. 值可以是十進製或十六進制
  2. 必須轉義%SystemRoot%
  3. REG_DWORD不能省略

電源外殼:

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

26
2018-06-13 20:39





更改代碼頁的命令是 chcp <codepage>。例: chcp 1252。您應該在Powershell窗口中鍵入它。 為了避免每次都輸入它的麻煩(如果你總是需要更改代碼頁),你可以將它附加到程序的命令行。為此,請按照下列步驟操作:

  1. 右鍵單擊“開始”菜單上的Powershell圖標,然後選擇“更多”>“打開文件位置”。
  2. 右鍵單擊Powershell快捷方式,然後選擇“屬性”。
  3. 將以下內容添加到“目標”命令行的末尾: -NoExit -Command "chcp 1252"

要開心。 除非您沒有其他選擇,否則不要對Windows註冊表大驚小怪。


4
2017-11-02 21:11



這個對我很有用。 -NoExit -Command "chcp 1252 > null" 也會在開頭省略有關所選代碼頁的消息。 - CodeMonkey


這可以通過創建PowerShell配置文件並向其添加命令“chcp 65001> $ null”來完成:

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

這不需要編輯註冊表,並且與編輯快捷方式不同,如果使用Windows資源管理器上下文菜單在特定文件夾中啟動PowerShell,則可以使用該註冊表。


1
2017-09-03 20:56



所以這與建議使用的其他答案完全不同 chcp 65001? - Pimp Juice IT