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?

6voto

Aaron3468 Punkte 1654

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

  1. Sie benötigen eine Schriftart mit Unicode-Unterstützung. Windows wird mit der Schriftart Lucida Console geliefert, die Sie auswählen können durch Rechtsklick auf die Titelleiste der Eingabeaufforderung und klicken Sie auf die Schaltfläche Defaults Option. Dies ermöglicht auch den Zugriff auf Farben. Beachten Sie, dass Sie auch die Einstellungen für den Befehl Windows ändern können, der auf bestimmte Weise aufgerufen wird (z. B. hier öffnen, Visual Studio), indem Sie Properties stattdessen.
  2. Sie müssen die Codepage auf cp65001 die offenbar Microsofts Versuch ist, der Eingabeaufforderung Unterstützung für UTF-7 und UTF-8 zu bieten. Führen Sie dazu Folgendes aus chcp 65001 in der Eingabeaufforderung . Einmal eingestellt, bleibt es so, bis das Fenster geschlossen wird. Sie müssen dies jedes Mal neu tun, wenn Sie cmd.exe starten.

Eine dauerhafte Lösung finden Sie unter diese Antwort auf 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 von it in chcp 65001 . Wenn Sie die Ausgabemeldung des Befehls nicht sehen wollen, verwenden Sie @chcp 65001>nul stattdessen.

Einige Programme haben Probleme, mit dieser Kodierung zu interagieren, wie z.B. MinGW, das beim Kompilieren mit einer unsinnigen Fehlermeldung scheitert. Nichtsdestotrotz funktioniert dies sehr gut und verursacht bei der Mehrheit der Programme keine Fehler.

5voto

code4j Punkte 3768

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

Zur Anzeige der Dateiname , wie zum Beispiel dir o ls wenn Sie Ubuntu bash auf Windows 10 installiert haben

  1. Legen Sie die Region so fest, dass sie Nicht-UTF-8-Zeichen unterstützt.

  2. Danach wird die Schriftart der Konsole in die Schriftart des jeweiligen Gebietsschemas geändert, und auch die Kodierung der Konsole wird geändert.

Nachdem Sie die vorangegangenen Schritte durchgeführt haben, können Sie zur Anzeige der Dateiinhalt einer UTF-8-Datei mit einem Kommandozeilenwerkzeug

  1. Ändern Sie die Seite in utf-8 durch chcp 65001
  2. Wechseln Sie zu einer Schriftart, die utf-8 unterstützt, z. B. Lucida Console
  3. Verwenden Sie type um den Inhalt der Datei einzusehen, oder cat wenn Sie Ubuntu Bash auf Windows 10 installiert haben
  4. Bitte beachten Sie, dass ich nach der Einstellung der Konsolenkodierung auf utf-8 keine chinesischen Zeichen in cmd mit der chinesischen Eingabemethode eingeben kann.

Die faulste Lösung: Verwenden Sie einfach einen Konsolenemulator wie z. B. http://cmder.net/

3voto

S. Hristov Punkte 61

Eine schnelle Entscheidung für .bat-Dateien, wenn Ihr Computer Ihren Pfad/Dateinamen korrekt anzeigt, wenn Sie ihn im DOS-Fenster eingeben:

  1. copy con temp.txt [drücken Sie Enter]
  2. Geben Sie den Pfad/Dateinamen ein [drücken Sie die Eingabetaste].
  3. Pulse Strg-Z [drücken Sie Enter]

Auf diese Weise erstellen Sie eine .txt-Datei - temp.txt. Öffnen Sie diese in Notepad, kopieren Sie den Text (keine Sorge, er wird unleserlich aussehen) und fügen Sie ihn in Ihre .bat-Datei ein. Das Ausführen der so erstellten .bat-Datei im DOS-Fenster hat bei mir funktioniert (kyrillisch, bulgarisch).

3voto

Robert Boehne Punkte 279

Ich sehe hier mehrere Antworten, aber sie scheinen nicht auf die Frage einzugehen - der Benutzer möchte Unicode-Eingaben von der Befehlszeile erhalten.

Windows verwendet UTF-16 für die Kodierung in Zwei-Byte-Strings, so dass Sie diese vom Betriebssystem in Ihr Programm übernehmen müssen. Es gibt zwei Möglichkeiten, dies zu tun.

1) Microsoft hat eine Erweiterung, die es ermöglicht, eine breite Palette von Zeichen zu verwenden: int wmain(int argc, wchar_t *arg https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Rufen Sie die Windows-Api auf, um die uni wchar_t win_argv = (wchar_t )CommandLineToArgvW(GetCommandLineW() https://docs.microsoft.com/en-us/Windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Lesen Sie dies: http://utf8everywhere.org für detaillierte Informationen, insbesondere wenn Sie andere Betriebssysteme unterstützen.

3voto

Christoforos Punkte 534

Für ein ähnliches Problem (mein Problem war es, UTF-8-Zeichen von MySQL auf einer Eingabeaufforderung anzuzeigen),

Ich habe das Problem folgendermaßen gelöst:

  1. Ich habe die Schriftart der Eingabeaufforderung in Lucida Console geändert. (Dieser Schritt ist für Ihre Situation sicher irrelevant. Er hat nur mit dem zu tun, was Sie auf dem Bildschirm sehen und nicht mit dem, was wirklich das Zeichen ist).

  2. Ich habe die Codepage auf Windows-1253 geändert. Sie tun dies in der Eingabeaufforderung mit "chcp 1253". Das funktionierte in meinem Fall, wo ich UTF-8 sehen wollte.

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