Windows konsolunun varsayılan kod sayfasını UTF-8 olarak değiştir


123

Şu anda Windows 7 x64 kullanıyorum ve genellikle tüm konsol araçlarının varsayılan kod sayfası 850 yerine UTF-8 ile çalışmasını istiyorum.

Koşu chcp 65001yardımcı olur ancak varsayılan kod sayfası olarak ise ayarlamak için herhangi bir yolu yoktur herhangi araçları kullanımdan önce komut isteminde?

Güncelleme:

Benim durumumda sistemin önyükleme yapamaması HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPiçin 65001görünecek değerin değiştirilmesi .

Önerilen değişiklik HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autoruniçin @chcp 65001>nulbenim amaç için sadece iyi hizmet etti. ( Ole_Brun sayesinde )


Amaçlanan çözümün Windows 'find.exe dosyasını kırabilir (Android SDK ile ilgili sorunlara neden olabilir): superuser.com/questions/176737/…
J Rao

Hm, chcp 65001 kullandığımda konsol pencerelerim dir yaptığımda çöküyor, ancak cmd.exe'yi / u bayrağıyla başlatmaya yardımcı oluyor (nb: unicode'u chcp.com çıkışına yansıtmıyor)
eckes

10
Windows konsolu, kodlama 65001 gibi desteklenmeyen bir çok baytlı bir kod sayfasına ayarlandığında hatalarla karşılaşır. Win32 WriteFile / ReadFile API'lerinin çıkış sayısını kullanan herhangi bir yazılım yanlış sonuçlar alır ve sonuçta MSVCRT'ninki gibi bir şey oluşturur stdlib'in uygulanması, karışık / tekrarlanan çıktılar üretecek ve ASCII dışı ile karşı karşıya kaldığında girdiyi askıya alacaktır. MS bunu düzeltmek için etrafa gelinceye kadar - ve on yıllardır böyle bir şey olmadı - dünya genelinde konsol kodu sayfasını 65001 olarak değiştirmek olağanüstü derecede kötü bir fikir .
bobince

2
AWindows işlevlerinin sürümlerinin herhangi bir kullanımı bozulur. WSürümleri kullanabilmek için tüm kodların taşınması gerekir .
Demi

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPunicode olmayan (utf olmayan) ortamlar için geri dönüş olarak kullanılır, belli ki tanımı gereği tartışmalı olduğunu gördüğünüz gibi bir 'unicode'a zorlamaya çalışıyorsunuz. Windows muhtemelen önyükleme sırasında bazı sistem öğeleri çalışacak unicode olmayan karakter grubuna bağlı olduğundan askıda kalıyor.
venimus

Yanıtlar:


99

Yalnızca konsolun kod sayfasını değiştirmek için aşağıdakileri yapın:

  1. Başlat -> Çalıştır -> regedit
  2. Git [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Değeri olarak değiştir chcp 65001

1
@Regent Soruda, sizin için çalıştığını belirttiğiniz kayıt defteri değeri @chcp 65001>nul, bu kabul edilmiş cevapta iken chcp 65001. İkisi arasındaki farklar nelerdir?
galacticninja

7
@galacticninja basitçe koymak chcp 65001, her açılan komut isteminin 'Aktif kod sayfası: 65001' yazmasını sağlarken @chcp 65001>nulçıktıları önler.
Regent

7
AutorunWindows 8.1 altında benim için mevcut değil.
kleinfreund

2
@kleinfreund @Luke: Autorunmevcut değilse , @chcp 65001>nul
Dacto

1
@ Dr.jacky Tehlikeli ne demek istediklerini tam olarak bilmiyoruz. OP sorusunu şimdi yanıtladım. Yapmanız gerekip gerekmediği farklı bir sorudur. Python ile ilgili bazı sorunlar olabileceğine inanıyorum, bu yüzden kod sayfasını en azından 65001 olarak ayarlamadan önce bunu kontrol etmek isteyebilirsiniz.
Nils Magne Lunde

38

Şahsen kayıt defterini değiştirmekten hoşlanmıyorum. Bu, birçok soruna neden olabilir. Bir toplu iş dosyası oluşturdum:

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

C:\Windows\System32Switch.bat olarak kaydedildim .

Masaüstünde cmd.exe için bir bağlantı oluşturdum.

Cmd kısayolunun özelliklerinde hedefi şu şekilde değiştirin: C:\Windows\System32\cmd.exe /k switch

Voilá, UTF-8 yazmam gerektiğinde, bu linki kullanıyorum.


7
Active code page: 65001Stdout'a yazdıracağını unutmayın . Eğer böyle bir şey yapıyorsanız CHCP 65001 && mycommand.exe, başlangıçta kod sayfasını yazdırırsınız. Yapmanız gerekenCHCP 65001 >nul && mycommand.exe
frumbert

32

Kayıt dosyası:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Değer hex cinsinden olmalıdır
  2. Üst satır tam olarak olduğu gibi dahil edilmelidir
  3. HKEY_CURRENT_USER kısaltılamaz
  4. dword ihmal edilemez

Komut istemi:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Değer dec veya hex olabilir
  2. % SystemRoot% kaçmış olmalı
  3. REG_DWORD atlanamaz

Güç kalkanı:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Değer dec veya hex olabilir
  2. -Type DWord PowerShell 3+ ile varsayılmıştır
  3. Kullanabilirsiniz ni -> New-Item
  4. Kullanabilirsiniz sp -> Set-ItemProperty
  5. Kullanabilirsiniz -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. Değer dec veya hex olabilir
  2. Kullanabilirsiniz / -> \
  3. Kullanabilirsiniz HKCU -> HKEY_CURRENT_USER
  4. Kullanabilirsiniz user -> HKEY_CURRENT_USER

Windows 10'da çalışmadı. İşler, kod sayfasını chcp komutu ile ayarlayan bir otomatik çalıştırma oluşturmaktır.Eg,
George

Düzenleme zaman aşımına uğradı önce söylemek istediğim, chcp 65001autorun komut dosyasındaki sorun oldu. Bkz stackoverflow.com/a/17405182/315083
George

Mesele şu ki, sadece CMD için çalışıyor, fakat kendi başına konsol için değil.
AnrDaemon

5

Kod sayfasını değiştirme komutu chcp <codepage>. Örnek: chcp 1252. Bir Powershell penceresine yazmalısınız. Her zaman yazma zorluğundan kaçınmak için (kod sayfasını her zaman değiştirmeniz gerekirse), bunu programın komut satırına ekleyebilirsiniz. Bunu yapmak için şu adımları izleyin:

  1. Başlat menüsünde Powershell simgesine sağ tıklayın ve "Diğer"> "Dosya Konumunu Aç" ı seçin.
  2. Powershell kısayoluna sağ tıklayın ve "Özellikler" i seçin.
  3. Aşağıdakileri "Hedef" komut satırının sonuna ekleyin: -NoExit -Command "chcp 1252"

Mutlu ol. Başka bir seçeneğiniz yoksa, Windows Kayıt Defteri ile uğraşmayın.


Bu benim için mükemmel çalıştı. -NoExit -Command "chcp 1252 > null"ayrıca seçilen kod sayfası ile ilgili mesajı başlangıçta atlar.
CodeMonkey

5

Bu, bir PowerShell profili oluşturarak ve "chcp 65001> $ null" komutunu ekleyerek yapılabilir:

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

Bu, kayıt defterini düzenlemeyi gerektirmez ve bir kısayolu düzenlemenin aksine, PowerShell, Windows Gezgini içerik menüsünü kullanarak belirli bir klasörde başlatıldığında çalışır.


1
@PimpJuiceIT, hayır .. bu cevabın ilk satırına bakınız.
Dacto

4

Windows 10'un 1809 sürümünde, bunu sisteme gidip , kutuyu Language settingsseçip Administrative language settingstıklayarak ve sonra bilgisayarımı yeniden başlatarak kalıcı olarak çözmeyi başardım .Change system locale...Beta: Use Unicode UTF-8 for worldwide language support

Bu şekilde tüm uygulamalar için geçerlidir, hatta komut isteminden başlamadığım uygulamalar!
(Bu benim için gerekliydi, çünkü Agda kodunu Atom'dan düzenlemeye çalışıyordum.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.