So zeigen Sie utf-8 in der Windows-Konsole an

Ich verwende Python 2.6 unter Windows 7

Ich habe mir hier einen Code ausgeliefert: Python, Unicode und die Windows-Konsole

Mein Ziel ist es, uft-8 Strings in der Windows-Konsole anzeigen zu können.

Anscheinend in python 2.6, die

Sys.setdefaultencoding ()

Wird nicht mehr unterstützt

Allerdings habe ich reload (sys) geschrieben, bevor ich versuchte, es zu benutzen und es magisch nicht Fehler.

Dieser Code wird NICHT Fehler, aber es zeigt lustige Zeichen statt japanischen Text. Ich glaube, das Problem ist, weil ich die Codepage der Windows-Konsole nicht erfolgreich geändert habe.

Das sind meine Versuche, aber sie arbeiten nicht:

reload(sys) sys.setdefaultencoding('utf-8') print os.popen('chcp 65001').read() sys.stdout.encoding = 'cp65001' 

Vielleicht kannst du win32console benutzen, um die Codepage zu ändern? Ich habe versucht, den Code von der Website, die ich verknüpft, aber es auch aus der win32console .. vielleicht ist dieser Code veraltet.

Hier ist mein Code, das ist kein Fehler, sondern druckt lustige Charaktere:

 #coding=<utf8> import os import sys import codecs reload(sys) sys.setdefaultencoding('utf-8') sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) #print os.popen('chcp 65001').read() print(sys.stdout.encoding) sys.stdout.encoding = 'cp65001' print(sys.stdout.encoding) x = raw_input('press enter to continue') a = 'こんにちは世界'#.decode('utf8') print a x = raw_input() 

4 Solutions collect form web for “So zeigen Sie utf-8 in der Windows-Konsole an”

Ich weiß, du sagst, du benutzt Python 2.6, aber wenn du Python 3.3 benutzt kannst, wirst du feststellen, dass dies endlich unterstützt wird.

Verwenden Sie den Befehl chcp 65001 bevor Sie Python starten.

Siehe http://docs.python.org/dev/whatsnew/3.3.html#codecs

Niemals jemals setdefaultencoding . Wenn du Unicode-Strings in stdio schreiben willst, kodiere sie explizit. Monkeying herum mit setdefaultencoding verursachen Stdlib-Module und Drittanbieter-Module gleichermaßen in schreckliche subtile Möglichkeiten zu brechen, indem sie implizite Umwandlung zwischen str und unicode wenn es nicht passieren sollte.

Ja, das Problem ist höchstwahrscheinlich, dass Ihre Codepage nicht richtig eingestellt ist. Die Verwendung von os.popen wird jedoch nicht die Codepage ändern. Es wird eine neue Shell erstellen, seine Codepage ändern und dann sofort beenden, ohne deine Konsole zu beeinflussen. Ich bin nicht persönlich sehr vertraut mit Fenstern, also konnte ich Ihnen nicht sagen, wie Sie die Codepage Ihrer Konsole aus Ihrem Python-Programm ändern können.

Der Weg, um Unicode-Daten per utf-8 aus python, wie bereits erwähnt, korrekt anzuzeigen, besteht darin, Ihre Strings explizit zu codieren, bevor sie gedruckt werden: print s.encode('utf-8')

Das Ändern der Konsolen-Code-Seite ist sowohl unnötig und wird nicht funktionieren (insbesondere die Einstellung auf 65001 läuft in einen Python-Bug ). Siehe diese Frage für Details und wie man Unicode-Zeichen auf der Konsole unabhängig von der Codepage ausdruckt.

Windows unterstützt UTF-8 nicht ordnungsgemäß in einer Konsole. Der einzige Weg, den ich kenne, um Japanisch in der Konsole anzuzeigen, ist durch Ändern (auf XP) Systemsteuerung der Region und Sprache, Registerkarte "Erweitert", Sprache für Nicht-Unicode-Programme auf Japanisch. Nach dem Neustart öffnen Sie eine Konsole und führen Sie "chcp" aus, um die Codepage der japanischen Konsole zu finden. Dann entweder Unicode-Strings oder Byte-Strings ausdrucken, die explizit in der richtigen Codepage codiert sind.

  • Simulieren eines Tastendrucks in Python
  • Fenster Icon von Exe in PyQt4
  • Resize-Display-Auflösung mit Python mit Cross-Plattform-Unterstützung
  • MemoryLoadError beim Versuch, py2exe-Anwendung auszuführen
  • Warum Charakter '^' wird von Python Popen ignoriert - wie man '^' Charakter in Popen Windows zu entkommen?
  • Die Suche nach einem USB in Python kehrt zurück "es gibt keine Festplatte im Laufwerk"
  • Fehler beim Upgrade von Pip: UnicodeDecodeError: 'utf-8' Codec kann kein Byte decodieren
  • Cross-Plattform-Raum verbleibend auf Volumen mit Python
  • Gibt es eine Möglichkeit, numerische COM-Fehlercodes in pywin32 zu decodieren
  • Unter Windows, wie man zum Schreiben einer Datei öffnen, die bereits zum Schreiben von einem anderen Prozess geöffnet wurde?
  • Was sind die Fallstricke und Workarounds bei der Verwendung von Python virtuellen Umgebungen unter Windows?
  • Python ist die beste Programmiersprache der Welt.