Ändern Sie die Standard-Codepage der Windows-Konsole in UTF-8


123

Momentan verwende ich Windows 7 x64 und möchte, dass alle Konsolentools mit UTF-8 und nicht mit der Standard-Codepage 850 arbeiten.

Das Ausführen chcp 65001in der Eingabeaufforderung vor der Verwendung von Tools hilft, aber gibt es eine Möglichkeit, die Codepage als Standard festzulegen?

Aktualisieren:

Wenn Sie den HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPWert so 65001ändern, dass er angezeigt wird , kann das System in meinem Fall nicht mehr gestartet werden.

Vorgeschlagene Änderung von HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunzu @chcp 65001>nuldiente gerade gut für meinen Zweck. (Danke an Ole_Brun )


Beachten Sie, dass die beabsichtigte Lösung die Windows-Datei find.exe beschädigen kann (was Probleme mit der Erstellung des Android SDK verursachen würde): superuser.com/questions/176737/…
J Rao

Hm, wenn ich chcp 65001 verwende, stürzt mein Konsolenfenster ab, wenn ich dir tue, aber es hilft einfach, cmd.exe mit dem Flag / u zu starten (nb: es verwendet Unicode, da es nicht in der Ausgabe von chcp.com wiedergegeben wird)
eckes

10
Die Windows-Konsole ist mit Fehlern behaftet, wenn die Codierung auf eine nicht unterstützte Multibyte-Codepage wie 65001 eingestellt ist. Jede Software, die die Ausgabezahlen der Win32 WriteFile / ReadFile-APIs verwendet, führt zu falschen Ergebnissen, und folglich baut das Material auf den MSVCRTs auf Die Implementierung der stdlib erzeugt eine verstümmelte / wiederholte Ausgabe und bleibt bei der Eingabe hängen, wenn sie mit Nicht-ASCII konfrontiert wird. Bis MS damit fertig ist, das Problem zu beheben - und seit Jahrzehnten ist nichts davon zu spüren -, ist es eine außerordentlich schlechte Idee, die Codepage der Konsole auf 65001 zu ändern .
Bobince

2
Jede Verwendung der AVersionen der Windows-Funktionen ist fehlerhaft. Der gesamte Code muss portiert werden, um die WVersionen zu verwenden.
Demi

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPwird als Fallback für Nicht-Unicode-Umgebungen (Non-Utf) verwendet. Sie versuchen offensichtlich, einen "Unicode" zu erzwingen, da dies per Definition umstritten ist. Windows hängt sich wahrscheinlich auf, weil einige Systemfunktionen beim Booten davon abhängen, dass ein Nicht-Unicode-Zeichensatz funktioniert.
Venimus

Antworten:


99

Gehen Sie wie folgt vor, um die Codepage nur für die Konsole zu ändern:

  1. Start -> Ausführen -> regedit
  2. Gehe zu [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Ändern Sie den Wert in chcp 65001

1
@Regent In der Frage ist der von Ihnen erwähnte Registrierungswert, der für Sie funktioniert hat @chcp 65001>nul, während dies in dieser akzeptierten Antwort der Fall ist chcp 65001. Was sind die Unterschiede zwischen den beiden?
Galacticninja

7
Durch einfaches Setzen von @galacticninja chcp 65001wird bei jeder geöffneten Eingabeaufforderung "Active code page: 65001" gedruckt, während @chcp 65001>nuldie Ausgabe verhindert wird.
Regent

7
Autorunist für mich unter Windows 8.1 nicht vorhanden.
kleinfreund

2
@kleinfreund @Luke: wenn Autorunnicht vorhanden ist, können Sie ein Add New String Value mit dem Inhalt@chcp 65001>nul
Dacto

1
@ Dr.jacky Weiß nicht genau, was sie mit gefährlich meinen. Ich habe gerade die Frage des OP beantwortet. Ob Sie es tun sollten oder nicht, ist eine andere Frage. Ich glaube, es könnte einige Probleme mit Python geben, deshalb sollten Sie dies überprüfen, bevor Sie die Codepage auf mindestens 65001 setzen.
Nils Magne Lunde

38

Persönlich mag ich es nicht, die Registrierung zu ändern. Dies kann viele Probleme verursachen. Ich habe eine Batch-Datei erstellt:

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

Ich habe C:\Windows\System32als switch.bat gespeichert.

Ich habe einen Link für cmd.exe auf dem Desktop erstellt.

Ändern Sie in den Eigenschaften der cmd-Verknüpfung das Ziel in: C:\Windows\System32\cmd.exe /k switch

Voilá, wenn ich UTF-8 eingeben muss, benutze ich diesen Link.


7
Beachten Sie, dass Active code page: 65001auf Standard gedruckt wird . Wenn Sie also so etwas tun CHCP 65001 && mycommand.exe, wird die Codepage zu Beginn ausgedruckt. Sie müssenCHCP 65001 >nul && mycommand.exe
12.

32

Reg-Datei:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Der Wert muss in hex sein
  2. Die oberste Zeile muss so wie sie ist enthalten sein
  3. HKEY_CURRENT_USER kann nicht abgekürzt werden
  4. Dword kann nicht weggelassen werden

Eingabeaufforderung:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Der Wert kann in dez oder hex angegeben werden
  2. % SystemRoot% muss maskiert werden
  3. REG_DWORD kann nicht weggelassen werden

Power Shell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Der Wert kann in dez oder hex angegeben werden
  2. -Type DWord wird mit PowerShell 3+ vorausgesetzt
  3. Kann benutzen ni -> New-Item
  4. Kann benutzen sp -> Set-ItemProperty
  5. Kann benutzen -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. Der Wert kann in dez oder hex angegeben werden
  2. Kann benutzen / -> \
  3. Kann benutzen HKCU -> HKEY_CURRENT_USER
  4. Kann benutzen user -> HKEY_CURRENT_USER

Hat unter Windows 10 nicht funktioniert. Was funktioniert, ist das Erstellen eines Autostarts, mit dem die Codepage über den Befehl chcp festgelegt wird.Eg,
George

Was ich sagen wollte, bevor die Zeitüberschreitung für die Bearbeitung überschritten wurde, war die Ausgabe chcp 65001einer Autorun-Befehlsdatei. Siehe stackoverflow.com/a/17405182/315083
George,

Die Sache ist, es funktioniert nur für CMD, aber nicht für die Konsole für sich.
AnrDaemon

5

Der Befehl zum Ändern der Codepage lautet chcp <codepage>. Beispiel: chcp 1252. Sie sollten es in ein Powershell-Fenster eingeben. Um das mühsame Eingeben zu vermeiden (wenn Sie die Codepage immer ändern müssen), können Sie sie an die Befehlszeile des Programms anhängen. Gehen Sie dazu folgendermaßen vor

  1. Klicken Sie mit der rechten Maustaste auf das Powershell-Symbol im Startmenü und wählen Sie "Mehr"> "Dateispeicherort öffnen".
  2. Klicken Sie mit der rechten Maustaste auf die PowerShell-Verknüpfung und wählen Sie "Eigenschaften".
  3. Fügen Sie am Ende der Befehlszeile "Target" Folgendes hinzu: -NoExit -Command "chcp 1252"

Sei glücklich. Machen Sie keine Probleme mit der Windows-Registrierung, es sei denn, Sie haben keine andere Option.


Dieser funktionierte perfekt für mich. -NoExit -Command "chcp 1252 > null"Lässt auch die Nachricht über die ausgewählte Codepage am Anfang aus.
CodeMonkey

5

Dies kann erreicht werden, indem ein PowerShell-Profil erstellt und der Befehl "chcp 65001> $ null" hinzugefügt wird:

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

Dies erfordert keine Bearbeitung der Registrierung und funktioniert im Gegensatz zur Bearbeitung einer Verknüpfung, wenn PowerShell in einem bestimmten Ordner über das Kontextmenü von Windows Explorer gestartet wird.


1
@PimpJuiceIT, nein .. siehe die erste Zeile dieser Antwort.
Dacto

4

In der 1809-Version von Windows 10 habe ich es geschafft, dieses Problem dauerhaft zu lösen, indem ich zum System gegangen bin, das Kontrollkästchen Language settingsausgewählt Administrative language settings, darauf geklickt und es dann neu gestartet habe.Change system locale...Beta: Use Unicode UTF-8 for worldwide language support

Auf diese Weise gilt es für alle Anwendungen, auch für diejenigen, die ich nicht über eine Eingabeaufforderung starte!
(Was für mich notwendig war, da ich versuchte, Agda-Code von Atom aus zu bearbeiten.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.