361 Stimmen

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

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 über ein Problem gestolpert - wir können nicht die š Brief an die Befehlszeilentools. Die Eingabeaufforderung oder was auch immer bringt es durcheinander, und die tf.exe Das Dienstprogramm kann das angegebene Projekt nicht finden.

Ich habe verschiedene Formate für die .bat-Datei ausprobiert (ANSI, UTF-8 mit und ohne STÜCKLISTE ) sowie die Erstellung eines Skripts in JavaScript (das von Haus aus Unicode ist) - aber ohne Erfolg. Wie führe ich ein Programm aus und übergebe ihm eine Unicode Befehlszeile?

16voto

Wernfried Domscheit Punkte 45772

Es ist ziemlich schwierig, die Standard-Codepage der Windows-Konsole zu ändern. Wenn Sie im Internet suchen, finden Sie verschiedene Vorschläge, aber einige davon können Ihr Windows komplett zerstören, d.h. Ihr PC startet 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 Wert String hinzu Autorun = chcp 65001 .

Oder Sie können dieses kleine Batch-Skript für die gängigsten Codeseiten 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
)

Verwendung von @chcp 65001>nul anstelle von chcp 65001 unterdrückt die Ausgabe "Active code page: 65001", die Sie jedes Mal erhalten würden, wenn Sie eine neue Windows-Befehlszeile starten.

Eine vollständige Liste aller verfügbaren Nummern erhalten Sie unter Code Page Identifiers

Beachten Sie, dass die Einstellungen nur für den aktuellen Benutzer gelten. Wenn Sie sie für alle Benutzer festlegen möchten, ersetzen Sie die Zeile SET ROOT_KEY="HKEY_CURRENT_USER" von SET ROOT_KEY="HKEY_LOCAL_MACHINE"

14voto

User Punkte 29239

Der Trick besteht darin, dass die Eingabeaufforderung diese nicht-englischen Zeichen tatsächlich versteht, sie aber nicht korrekt anzeigen kann.

Wenn ich in der Eingabeaufforderung einen Pfad eingebe, der einige nicht-englische Zeichen enthält, wird er als "?? ?????? ?????" angezeigt. Wenn Sie Ihren Befehl eingeben (in meinem Fall cd "??? ?????? ?????"), funktioniert alles wie erwartet.

10voto

zvi Punkte 2970

Ich habe diese Methode in den neuen Versionen von Windows 10 als nützlich empfunden:

Schalten Sie diese Funktion ein: "Beta: Unicode UTF-8 für weltweite Sprachunterstützung verwenden"

Systemsteuerung -> Regionale Einstellungen -> Registerkarte Verwaltung-> Ändern Systemgebietsschema...

Region Settings

10voto

Steve Barnes Punkte 26222

Eine wirklich einfache Möglichkeit ist die Installation einer Windows-Bash-Shell wie z.B. MinGW und verwenden Sie diese:

Enter image description here

Es gibt eine kleine Lernkurve, da Sie die Unix-Befehlszeilenfunktionalität verwenden müssen, aber Sie werden die Möglichkeiten lieben, und Sie können den Konsolenzeichensatz auf UTF-8 einstellen.

Enter image description here

Natürlich erhalten Sie auch alle üblichen *nix-Funktionen wie grep, find, less usw.

8voto

VonC Punkte 1117238

Ab Juni 2019 müssen Sie bei Windows 10 den Codepage nicht mehr ändern.

Siehe " Einführung in Windows Terminal " (aus Kayla Zimt ) und die Microsoft/Terminal .
Durch die Verwendung der Schriftart Consolas, teilweise Es wird Unicode-Unterstützung angeboten.

Wie dokumentiert in Microsoft/Terminal Ausgabe 387 :

Derzeit gibt es 87.887 Ideogramme in Unicode. Brauchen Sie die auch alle?
Wir brauchen eine Grenze, und Zeichen, die über diese Grenze hinausgehen, sollten durch Font Fallback / Font Linking / was auch immer behandelt werden.

Was Consolas abdecken sollte:

  • Zeichen, die als Symbole verwendet werden, die von modernen OSS-Programmen in CLI verwendet werden.
  • Diese Zeichen sollten dem Design und den Metriken von Consolas entsprechen und sich an den bestehenden Consolas-Zeichen orientieren.

Was Consolas NICHT abdecken sollte:

  • Zeichen und Interpunktion von Schriften, die über Latein, Griechisch und Kyrillisch hinausgehen, insbesondere Zeichen, die eine komplexe Formgebung benötigen (wie Arabisch).
  • Diese Zeichen sollten mit Font Fallback behandelt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X