Wie verwendet man Unicode-Zeichen in der Windows-Befehlszeile?


Answers

Versuchen:

chcp 65001

Dadurch wird die Codepage in UTF-8 geändert. Außerdem müssen Sie Lucida-Konsolenschriftarten verwenden.

Question

Wir haben ein Projekt in Team Foundation Server (TFS), das ein nicht englisches Zeichen (š) enthält. Beim Versuch, ein paar Build-bezogene Dinge zu skripten, sind wir auf ein Problem gestoßen - wir können den Buchstaben š nicht an die Kommandozeilen-Tools übergeben. Die Eingabeaufforderung oder was es sonst nicht vermasselt, und das Dienstprogramm tf.exe kann das angegebene Projekt nicht finden.

Ich habe verschiedene Formate für die .bat-Datei (ANSI, UTF-8 mit und ohne BOM ) sowie Scripting in JavaScript (das ist inhärent Unicode) ausprobiert - aber kein Glück. Wie führe ich ein Programm aus und gebe es an eine Unicode- Befehlszeile weiter?




Zu utf-8: chcp 65001

Zurück zum Standard: chcp 437




Es ist ziemlich schwierig, die Standard-Codepage der Windows-Konsole zu ändern. Wenn Sie im Internet suchen, finden Sie verschiedene Vorschläge, aber einige von ihnen können Ihr Windows komplett zerstören, dh Ihr PC bootet nicht mehr.

Die sicherste Lösung ist diese: Gehen Sie zu Ihrem Registrierungsschlüssel HKEY_CURRENT_USER\Software\Microsoft\Command Processor und fügen Sie den String-Wert Autorun = chcp 65001 .

Oder Sie können dieses kleine Batch-Script für die gängigsten Codepages verwenden.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

Die Verwendung von @chcp 65001>nul anstelle von chcp 65001 unterdrückt die Ausgabe "Aktive Codepage: 65001", die Sie jedes Mal erhalten, wenn Sie ein neues Befehlszeilenfenster starten.

Eine vollständige Liste aller verfügbaren Nummern, die Sie von Code Page Identifiern erhalten können

Beachten Sie, dass die Einstellungen nur für den aktuellen Benutzer gelten. Wenn Sie es für alle Benutzer SET ROOT_KEY="HKEY_CURRENT_USER" , ersetzen Sie Zeile SET ROOT_KEY="HKEY_CURRENT_USER" durch SET ROOT_KEY="HKEY_LOCAL_MACHINE"




Dieses Problem ist ziemlich ärgerlich. Normalerweise habe ich chinesisches Schriftzeichen in meinem Dateinamen und Dateiinhalt. Bitte beachten Sie, dass ich Windows 10 verwende, hier ist meine Lösung:

Um den Dateinamen anzuzeigen, wie dir oder ls wenn Sie Ubuntu Bash unter Windows 10 installiert haben

  1. Stellen Sie die Region so ein, dass sie nicht-utf 8 Zeichen unterstützt.

  2. Danach wird die Schriftart der Konsole in die Schriftart dieser Ländereinstellung geändert und auch die Codierung der Konsole geändert.

Nachdem Sie die vorherigen Schritte ausgeführt haben, um den Dateiinhalt einer UTF-8-Datei mit dem Befehlszeilentool anzuzeigen

  1. Ändern Sie die Seite nach utf-8 durch chcp 65001
  2. Wechseln Sie zu der Schriftart, die utf-8 unterstützt, z. B. Lucida Console
  3. Verwenden Sie den Befehl type um den Dateiinhalt anzuzeigen, oder cat wenn Sie Ubuntu Bash unter Windows 10 installiert haben
  4. Bitte beachten Sie, dass nach dem Einstellen der Kodierung der Konsole auf UTF-8, kann ich nicht Chinese-Zeichen in der Cmd mit chinesischen Eingabemethode eingeben.

Die faulste Lösung: Verwenden Sie einfach einen Konsolen-Emulator wie http://cmder.net/




Eine etwas sauberere Sache: Installieren Sie einfach das verfügbare, kostenlose Microsoft Japanese Language Pack. (Andere orientalische Sprachpakete funktionieren auch, aber ich habe die japanische getestet.)

Dies gibt Ihnen die Schriftarten mit den größeren Glyphengruppen, macht sie zum Standardverhalten, ändert die verschiedenen Windows-Tools wie cmd, WordPad usw.




Da ich keine vollständigen Antworten für Python 2.7 gesehen habe, werde ich die zwei wichtigen Schritte und einen optionalen Schritt skizzieren, der sehr nützlich ist.

  1. Sie benötigen eine Schriftart mit Unicode-Unterstützung. Windows wird mit der Lucida-Konsole geliefert, die ausgewählt werden kann, indem Sie mit der rechten Maustaste auf die Titelleiste der Eingabeaufforderung klicken und auf die Option Defaults klicken. Dies gibt auch Zugang zu Farben. Beachten Sie, dass Sie die Einstellungen für auf bestimmte Weise aufgerufene Befehlsfenster auch ändern können (z. B. hier öffnen, Visual Studio), indem Sie stattdessen Properties wählen.
  2. Sie müssen die Codepage auf cp65001 , was der Versuch von Microsoft zu sein cp65001 , der cp65001 UTF-7 und UTF-8-Unterstützung anzubieten. Führen Sie hierzu chcp 65001 in der Eingabeaufforderung aus . Einmal eingestellt, bleibt es so, bis das Fenster geschlossen wird. Sie müssen dies jedes Mal wiederholen, wenn Sie cmd.exe starten.

Eine ausführlichere Lösung finden Sie in dieser Antwort unter Super User. Kurz gesagt, erstellen Sie einen REG_SZ (String) -Eintrag mit regedit unter HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor und nennen Sie es AutoRun . Ändern Sie den Wert in chcp 65001 . Wenn Sie die Ausgabenachricht nicht über den Befehl @chcp 65001>nul möchten, verwenden @chcp 65001>nul stattdessen @chcp 65001>nul .

Einige Programme haben Probleme mit dieser Codierung zu interagieren, MinGW ist eine bemerkenswerte, die beim Kompilieren mit einer unsinnigen Fehlermeldung fehlschlägt. Dies funktioniert jedoch sehr gut und verursacht bei den meisten Programmen keine Fehler.




Überprüfen Sie die Sprache für Nicht-Unicode-Programme. Wenn Sie in der Windows-Konsole Probleme mit Russisch haben, sollten Sie Russisch hier einstellen:




Eine wirklich einfache Option ist es, eine Windows Bash Shell wie MinGW zu installieren und folgendes zu verwenden:

Es gibt ein bisschen eine Lernkurve, da Sie Unix-Befehlszeilen-Funktionalität verwenden müssen, aber Sie werden die Macht davon lieben, und Sie können den Konsolenzeichensatz auf UTF-8 setzen.

Natürlich bekommst du auch alle üblichen * nix-Goodies wie grep, find, less usw.




Related