Ubah halaman kode default konsol Windows ke UTF-8

123

Saat ini saya sedang menjalankan Windows 7 x64 dan biasanya saya ingin semua alat konsol bekerja dengan UTF-8 daripada dengan halaman kode standar 850.

Menjalankan chcp 65001perintah prompt sebelum menggunakan alat apa pun membantu tetapi apakah ada cara untuk mengaturnya sebagai halaman kode default?

Memperbarui:

Mengubah HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPnilai yang 65001muncul untuk membuat sistem tidak dapat boot dalam kasus saya.

Usulan perubahan HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorununtuk @chcp 65001>nuldilayani dengan baik untuk tujuan saya. (terima kasih kepada Ole_Brun )

Bupati
sumber
Perhatikan bahwa solusi yang dimaksudkan dapat mematahkan find.exe Windows (yang akan menyebabkan masalah dengan pembangunan Android SDK): superuser.com/questions/176737/…
J Rao
Hm, ketika saya menggunakan chcp 65001 crash windows konsol saya ketika saya melakukan dir, tetapi membantu untuk memulai cmd.exe dengan flag / u (nb: itu menggunakan unicode oleh karena itu tidak tercermin dalam output chcp.com)
eckes
10
Konsol Windows penuh dengan bug ketika pengkodean diatur ke halaman kode multi-byte yang tidak didukung seperti 65001. Setiap perangkat lunak yang menggunakan jumlah output dari Win32 WriteFile / ReadFile APIs akan mendapatkan hasil yang salah dan akibatnya hal-hal membangun seperti MSVCRT implementasi stdlib akan menghasilkan keluaran yang rusak / berulang dan bergantung pada input ketika dihadapkan dengan non-ASCII. Sampai MS menyelesaikannya - dan sudah puluhan tahun tanpa ada tanda-tanda akan terjadi - mengubah secara global halaman kode konsol ke 65001 adalah ide yang sangat buruk .
bobince
2
Setiap penggunaan Aversi fungsi Windows rusak. Semua kode perlu porting untuk menggunakan Wversi.
Demi
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPdigunakan sebagai cadangan untuk lingkungan non-unicode (non-utf), jelas Anda mencoba memaksanya ke 'unicode', karena Anda melihatnya kontroversial menurut definisi. Windows hang mungkin karena beberapa hal sistem pada boot tergantung pada charset non-unicode untuk bekerja.
Venimus

Jawaban:

99

Untuk mengubah codepage hanya untuk konsol, lakukan hal berikut:

  1. Mulai -> Jalankan -> regedit
  2. Pergi ke [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Ubah nilainya menjadi chcp 65001
Nils Magne Lunde
sumber
1
@Regent Dalam pertanyaan, nilai registri yang Anda sebutkan yang berfungsi untuk Anda adalah @chcp 65001>nul, sedangkan dalam jawaban yang diterima ini, itu chcp 65001. Apa perbedaan antara keduanya?
galacticninja
7
@galacticninja dengan sederhana chcp 65001akan menyebabkan setiap command prompt yang dibuka untuk mencetak 'Halaman kode aktif: 65001' sementara @chcp 65001>nulakan mencegah output apa pun.
Bupati
7
Autoruntidak ada untuk saya di bawah Windows 8.1.
kleinfreund
2
@kleinfreund @Luke: jika Autoruntidak ada, Anda dapat menambahkan Nilai String Baru dengan isi@chcp 65001>nul
Dacto
1
@ Dr.jacky Tidak yakin persis apa yang mereka maksud dengan berbahaya. Saya baru saja menjawab pertanyaan OP. Apakah Anda harus melakukannya atau tidak adalah pertanyaan yang berbeda. Saya percaya mungkin ada beberapa masalah dengan Python, jadi Anda mungkin ingin memeriksanya sebelum mengatur codepage ke 65001 setidaknya.
Nils Magne Lunde
38

Secara pribadi, saya tidak suka mengubah registri. Ini bisa menyebabkan banyak masalah. Saya membuat file batch:

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

Saya simpan di C:\Windows\System32sebagai switch.bat.

Saya membuat tautan untuk cmd.exe di Desktop.

Di properti pintasan cmd, ubah tujuan menjadi: C:\Windows\System32\cmd.exe /k switch

Voilá, ketika saya harus mengetikkan UTF-8, saya menggunakan tautan ini.

Juca
sumber
7
Perhatikan bahwa itu akan mencetak Active code page: 65001ke stdout. Jadi jika Anda melakukan sesuatu seperti itu CHCP 65001 && mycommand.exemaka Anda akan mendapatkan codepage dicetak pada awalnya. Anda perluCHCP 65001 >nul && mycommand.exe
frumbert
32

File reg:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Nilai harus dalam hex
  2. Baris teratas harus dimasukkan persis seperti apa adanya
  3. HKEY_CURRENT_USER tidak dapat disingkat
  4. kata tidak dapat dihilangkan

Prompt Perintah:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Nilai bisa dalam dec atau hex
  2. % SystemRoot% harus diloloskan
  3. REG_DWORD tidak dapat dihilangkan

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Nilai bisa dalam dec atau hex
  2. -Type DWord diasumsikan dengan PowerShell 3+
  3. Bisa menggunakan ni -> New-Item
  4. Bisa menggunakan sp -> Set-ItemProperty
  5. Bisa menggunakan -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. Nilai bisa dalam dec atau hex
  2. Bisa menggunakan / -> \
  3. Bisa menggunakan HKCU -> HKEY_CURRENT_USER
  4. Bisa menggunakan user -> HKEY_CURRENT_USER
Steven Penny
sumber
Tidak bekerja pada Windows 10. Apa pekerjaan adalah untuk menciptakan sebuah autorun yang menetapkan codepage melalui command.Eg chcp,
George
Apa yang ingin saya katakan sebelum pengeditan waktu habis adalah, masalah chcp 65001dalam file perintah autorun. Lihat stackoverflow.com/a/17405182/315083
George
Masalahnya, ini hanya berfungsi untuk CMD, tetapi tidak untuk konsol dengan sendirinya.
AnrDaemon
5

Perintah untuk mengubah codepage adalah chcp <codepage>. Contoh: chcp 1252. Anda harus mengetiknya di jendela Powershell. Untuk menghindari kesulitan mengetik setiap kali (jika Anda selalu harus mengubah codepage), Anda dapat menambahkannya ke baris perintah program. Untuk melakukannya, ikuti langkah-langkah ini:

  1. Klik kanan ikon Powershell pada menu Mulai dan pilih "Lainnya"> "Buka lokasi file".
  2. Klik kanan pintasan Powershell dan pilih "Properties".
  3. Tambahkan berikut ini di akhir baris perintah "Target": -NoExit -Command "chcp 1252"

Berbahagialah. Jangan repot-repot dengan Windows Registry kecuali Anda tidak memiliki pilihan lain.

JColares
sumber
Yang ini sangat cocok untuk saya. -NoExit -Command "chcp 1252 > null"juga menghilangkan pesan tentang halaman kode yang dipilih di awal.
CodeMonkey
5

Ini dapat dilakukan dengan membuat profil PowerShell dan menambahkan perintah "chcp 65001> $ null" ke dalamnya:

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

Ini tidak memerlukan pengeditan registri dan, tidak seperti pengeditan cara pintas, akan berfungsi jika PowerShell dimulai di folder tertentu menggunakan menu konteks Windows Explorer.

Freon Sandoz
sumber
1
@PimpJuiceIT, tidak .. lihat baris pertama dari jawaban ini.
Dacto
4

Pada versi 1809 build Windows 10, saya telah berhasil menyelesaikan ini secara permanen dengan masuk ke sistem Language settings, memilih Administrative language settings, mengklik, Change system locale...dan menandai Beta: Use Unicode UTF-8 for worldwide language supportkotak lalu restart komputer saya.

Dengan cara ini ini berlaku untuk semua aplikasi, bahkan yang tidak saya mulai dari command prompt!
(Yang penting bagi saya, karena saya mencoba mengedit kode Agda dari Atom.)

Isti115
sumber