Thay đổi trang mã mặc định của bảng điều khiển Windows thành UTF-8


123

Hiện tại tôi đang chạy Windows 7 x64 và thông thường tôi muốn tất cả các công cụ bảng điều khiển hoạt động với UTF-8 thay vì với trang mã mặc định 850.

Chạy chcp 65001trong dấu nhắc lệnh trước khi sử dụng bất kỳ công cụ nào sẽ giúp nhưng có cách nào để đặt là trang mã mặc định không?

Cập nhật:

Thay đổi HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPgiá trị 65001xuất hiện để làm cho hệ thống không thể khởi động trong trường hợp của tôi.

Đề xuất thay đổi HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunđể @chcp 65001>nulphục vụ tốt cho mục đích của tôi. (cảm ơn Ole_Brun )


Lưu ý giải pháp có mục đích có thể phá vỡ find.exe của Windows (điều này sẽ gây ra sự cố với bản dựng SDK Android): superuser.com/questions/176737/ mẹo
J Rao

Hm, khi tôi sử dụng 65001 chcp console cửa sổ của tôi sụp đổ khi tôi làm dir, nhưng nó giúp để chỉ bắt đầu cmd.exe với cờ / u (nb: nó sử dụng unicode bởi nó không được phản ánh trong đầu ra chcp.com)
eckes

10
Bảng điều khiển Windows bị lỗi khi mã hóa được đặt thành trang mã nhiều byte không được hỗ trợ như 65001. Bất kỳ phần mềm nào sử dụng số lượng đầu ra của API Win32 WriteFile / ReadFile sẽ nhận được kết quả sai và do đó công cụ xây dựng trên đó giống như MSVCRT việc thực hiện stdlib sẽ tạo ra đầu ra sai lệch / lặp đi lặp lại và treo trên đầu vào khi đối đầu với phi ASCII. Cho đến khi MS tìm cách sửa nó - và đã nhiều thập kỷ không có dấu hiệu nào xảy ra - trang mã bảng điều khiển thay đổi toàn cầu thành 65001 là một ý tưởng cực kỳ tồi tệ .
bobince

2
Bất kỳ việc sử dụng các Aphiên bản chức năng của Windows đều bị hỏng. Tất cả các mã cần phải được chuyển để sử dụng các Wphiên bản.
Demi

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPđược sử dụng làm dự phòng cho các môi trường không unicode (không phải utf), rõ ràng bạn cố gắng buộc nó thành một "unicode", như bạn thấy nó đang gây tranh cãi theo định nghĩa. Windows bị treo có lẽ vì một số nội dung hệ thống khi khởi động phụ thuộc vào bộ ký tự không unicode để hoạt động.
venimus

Câu trả lời:


99

Để chỉ thay đổi bảng mã cho bảng điều khiển, hãy làm như sau:

  1. Bắt đầu -> Chạy -> regedit
  2. Đi đến [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Thay đổi giá trị thành chcp 65001

1
@Regent Trong câu hỏi, giá trị đăng ký mà bạn đề cập có hiệu quả với bạn @chcp 65001>nul, trong khi trong câu trả lời được chấp nhận này, nó là chcp 65001. Đâu là sự khác biệt giữa cả hai?
galacticninja

7
@galacticninja chỉ cần đặt chcp 65001sẽ khiến mọi dấu nhắc lệnh được mở sẽ in 'Trang mã hoạt động: 65001' trong khi @chcp 65001>nulsẽ ngăn chặn mọi đầu ra.
Nhiếp chính

7
Autorunkhông có mặt cho tôi trong Windows 8.1.
kleinfreund

2
@kleinfreund @Luke: nếu Autorunkhông có mặt, bạn có thể thêm một New String Value với nội dung@chcp 65001>nul
Dacto

1
@ Dr.jacky Không chắc chắn chính xác ý nghĩa của chúng với nguy hiểm. Tôi vừa trả lời câu hỏi của OP. Cho dù bạn nên làm điều đó hay không là một câu hỏi khác nhau. Tôi tin rằng có thể có một số vấn đề với Python, vì vậy bạn có thể muốn kiểm tra điều đó trước khi đặt codepage thành 65001 ít nhất.
Nils Magne Lunde

38

Cá nhân, tôi không thích thay đổi sổ đăng ký. Điều này có thể gây ra rất nhiều vấn đề. Tôi đã tạo một tệp bó:

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

Tôi đã lưu tại C:\Windows\System32as switch.bat.

Tôi đã tạo một liên kết cho cmd.exe trên Bàn làm việc.

Trong các thuộc tính của phím tắt cmd, đã thay đổi đích thành: C:\Windows\System32\cmd.exe /k switch

Voilá, khi tôi cần gõ UTF-8, tôi sử dụng liên kết này.


7
Lưu ý rằng nó sẽ in Active code page: 65001ra thiết bị xuất chuẩn. Vì vậy, nếu bạn đang làm một cái gì đó như thế CHCP 65001 && mycommand.exethì bạn sẽ nhận được bản mã được in ra ngay từ đầu. Bạn cần phảiCHCP 65001 >nul && mycommand.exe
frumbert

32

Tập tin Reg:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Giá trị phải ở dạng hex
  2. Dòng trên cùng phải được bao gồm chính xác như là
  3. HKEY_CURRENT_USER không thể viết tắt
  4. từ khóa không thể được bỏ qua

Dấu nhắc lệnh:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Giá trị có thể ở dạng dec hoặc hex
  2. % SystemRoot% phải được thoát
  3. REG_DWORD không thể được bỏ qua

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Giá trị có thể ở dạng dec hoặc hex
  2. -Type DWord được giả định với PowerShell 3+
  3. Co thể sử dụng ni -> New-Item
  4. Co thể sử dụng sp -> Set-ItemProperty
  5. Co thể sử dụng -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. Giá trị có thể ở dạng dec hoặc hex
  2. Co thể sử dụng / -> \
  3. Co thể sử dụng HKCU -> HKEY_CURRENT_USER
  4. Co thể sử dụng user -> HKEY_CURRENT_USER

Không hoạt động trong Windows 10. Điều gì làm việc là tạo một autorun đặt bộ mã hóa thông qua lệnh chcp.Eg,
George

Những gì tôi muốn nói trước khi chỉnh sửa hết thời gian là, vấn đề chcp 65001trong một tệp lệnh tự động chạy. Xem stackoverflow.com/a/17405182/315083
George

Vấn đề là, nó chỉ hoạt động cho CMD, nhưng không phải cho giao diện điều khiển.
AnrDaemon

5

Lệnh để thay đổi codepage là chcp <codepage>. Ví dụ : chcp 1252. Bạn nên gõ nó trong cửa sổ Powershell. Để tránh những rắc rối khi gõ nó mọi lúc (nếu bạn luôn phải thay đổi bảng mã), bạn có thể nối nó vào dòng lệnh của chương trình. Để làm đươc như vậy, hãy tuân theo những bước sau:

  1. Nhấp chuột phải vào biểu tượng Powershell trên menu Bắt đầu và chọn "Khác"> "Mở vị trí tệp".
  2. Nhấp chuột phải vào phím tắt Powershell và chọn "Thuộc tính".
  3. Thêm dòng sau vào cuối dòng lệnh "Target": -NoExit -Command "chcp 1252"

Hãy hạnh phúc. Đừng phiền phức với Windows Registry trừ khi bạn không có lựa chọn nào khác.


Điều này làm việc hoàn hảo cho tôi. -NoExit -Command "chcp 1252 > null"cũng bỏ qua thông báo về trang mã được chọn lúc đầu.
CodeMonkey

5

Điều này có thể được thực hiện bằng cách tạo hồ sơ PowerShell và thêm lệnh "chcp 65001> $ null" vào nó:

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

Điều này không yêu cầu chỉnh sửa sổ đăng ký và, không giống như chỉnh sửa lối tắt, sẽ hoạt động nếu PowerShell được khởi động trong một thư mục cụ thể bằng menu ngữ cảnh Windows Explorer.


1
@PimpJuiceIT, không .. xem dòng đầu tiên của câu trả lời này.
Dacto

4

Trong bản dựng 1809 của Windows 10, tôi đã cố gắng giải quyết vấn đề này vĩnh viễn bằng cách truy cập hệ thống Language settings, chọn Administrative language settings, nhấp Change system locale...và kiểm tra Beta: Use Unicode UTF-8 for worldwide language supporthộp và sau đó khởi động lại máy tính của tôi.

Cách này áp dụng cho tất cả các ứng dụng, ngay cả những ứng dụng mà tôi không bắt đầu từ dấu nhắc lệnh!
(Điều này không cần thiết đối với tôi, vì tôi đã cố chỉnh sửa mã Agda từ Atom.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.