UTF8-Stiche im Ubuntu-Terminal mit einem Python-Skript anzeigen

In meinem Python-Skript, das auf der Kommandozeile auf Ubuntu läuft, wählt es UTF8-codierte Inhalte aus einer MySQL-Datenbank aus.

Dann möchte ich den String auf die Konsole drucken.

Die angezeigten Strings haben ein Codierungsproblem, da sie die akzentuierten Zeichen nicht korrekt anzeigen. Wie kann ich das beheben?

Vorzugsweise würde das Skript die Entscheidung treffen, anstatt eine Systemumgebung einzustellen, um ein einfaches Laufen auf anderen Systemen zu gewährleisten.

  • Kann kein Grad-Symbol in raw_input bekommen
  • Wie erstelle ich Zeichen-Arrays in numpy?
  • Drucken Sie eine Liste mit chinesischen Zeichen in Python
  • 3 Solutions collect form web for “UTF8-Stiche im Ubuntu-Terminal mit einem Python-Skript anzeigen”

    Es wird sehr dringend empfohlen, dass man nicht "?" Als Ersatzcharakter Setzen Sie einfach Ihre Ausgabecodierung auf UTF-8 und seien Sie damit fertig.

    for s in ("stdin","stdout","stderr"): setattr(sys, s, io.TextIOWrapper(getattr(sys, s).detach(), encoding="utf8")) 

    Alternativ, setzen Sie Ihre PYTHONIOENCODING envariable auf utf8, so dass Python aufhört zu erraten über die Ausgabe-Codierung.

    Jeder Ansatz ist unendlich viel besser als manuell codieren, was dumm ist.

    Wenn Sie sich weigern, auf Python3 zu aktualisieren, empfehle ich auch

     from __future__ import unicode_literals 

    Zu verbannen all das dumme u'...' Zeug.

    In letzter Zeit habe ich alle meine Python-Progams wie folgt angefangen:

     #!/usr/bin/env python3.2 # -*- coding: UTF-8 -*- from __future__ import print_function from __future__ import unicode_literals import re import sys import os if not (("PYTHONIOENCODING" in os.environ) and re.search("^utf-?8$", os.environ["PYTHONIOENCODING"], re.I)): sys.stderr.write(sys.argv[0] + ": Please set your PYTHONIOENCODING envariable to utf8\n") sys.exit(1) import unicodedata if unicodedata.unidata_version < "6.0.0": print("WARNING: Your old UCD is out of date, expected at least 6.0.0 but got", unicodedata.unidata_version) wide_enough = (sys.maxunicode >= 0x10FFFF) if not wide_enough: print("WARNING: Narrow build detected, your Python lacks full Unicode support!!") 

    Sie können die aktuelle Kodierung von STDOUT wie folgt erhalten:

     >>> import sys >>> sys.stdout.encoding UTF-8 

    Dann kodiere deine Unicode-String entsprechend:

     >>> u"Ä" u'\xc4' >>> sys.stdout.write(u"Ä".encode(enc, 'replace')) 

    Das 'Ersetzen' vermeidet UnicodeEncodeErrors, wenn ein Zeichen in der Codierung des Terminals nicht darstellbar ist. Diese wird dann durch ein Fragezeichen ersetzt.

    Die Eingabecodierung des Textes (utf-8 hier) spielt keine Rolle. Du solltest so schnell wie möglich utf8-bytestring in Unicode umwandeln, um den Text zu drucken:

     print(unicode_text) 
    • Kodiere den Text nicht in utf8 vor dem Drucken
    • Ändern sys.stdout nicht sys.stdout , um den Text mit utf8 für Sie zu codieren

    Die LANG wird von der Umgebung angegeben, die Ihr Skript basierend auf Gebietsschemaeinstellungen ( LANG , LC_CTYPE , LC_ALL ) oder PYTHONIOENCODING envvar ausführt. Geben Sie utf8 nicht unbedingt aus.

    Wenn das Gebietsschema nicht gesetzt ist, Sie können es explizit angeben:

     $ LANG=en_US.utf8 python your_script.py 

    Vergewissern Sie sich, dass Ihr Terminal in der Lage ist, die entsprechenden Unicode-Zeichen anzuzeigen (Fonts, die entsprechenden Locales ( locale -a ) sind installiert).

    Mit anderen Worten, um die Ausgabe zu beheben, repariere die Umgebung, zB konfiguriere deine Gebietsschema-Einstellungen, um C.UTF-8 zu verwenden .

    Python ist die beste Programmiersprache der Welt.