Kugelsichere Arbeit mit Kodierung in Python

Die Frage nach Unicode in Python2.

Da ich das weiß, sollte ich immer alles decode , was ich von außen gelesen habe (Dateien, net). decode konvertiert äußere Bytes in interne Python-Strings, wobei der in den Parametern angegebene Zeichensatz verwendet wird. Also decode("utf8") bedeutet, dass außerhalb Bytes Unicode-String sind und sie werden zu python-Strings decodiert.

Auch sollte ich immer alles encode was ich nach draußen schreibe. Ich spezifiziere die Codierung in den Parametern der encode und konvertiert sie in die richtige Codierung und schreibt.

Diese Aussagen sind richtig, nicht wahr?

Aber manchmal, wenn ich HTML-Dokumente analysiere, bekomme ich Decodierungsfehler. Wie ich das Dokument in einer anderen Codierung (zB cp1252 ) cp1252 und Fehler passiert, wenn ich versuche, dies mit der utf8-Codierung zu dekodieren. Also die Frage ist, wie man kugelsichere Anwendung schreiben?

Ich fand, dass es gute Bibliothek zu erraten, Kodierung ist Chardet und das ist die einzige Möglichkeit, kugelsichere Anwendungen zu schreiben. Recht?

3 Solutions collect form web for “Kugelsichere Arbeit mit Kodierung in Python”

decode("utf8") bedeutet, dass externe Bytes Unicode-String sind und sie werden zu python-Strings decodiert.

Diese Aussagen sind richtig, nicht wahr?

Nein, außerhalb von Bytes sind binäre Daten, sie sind keine Unicode-String. So <str>.decode("utf8") erzeugt ein Python- unicode Objekt durch Interpretation der Bytes in <str> als UTF-8; Kann es einen Fehler auslösen, wenn die Bytes nicht als UTF-8 decodiert werden können.

Die Bestimmung der Kodierung eines gegebenen Dokuments ist nicht unbedingt eine einfache Aufgabe. Sie müssen entweder eine externe Informationsquelle haben, die Ihnen die Kodierung mitteilt, oder Sie müssen etwas über das wissen, was im Dokument ist. Wenn Sie z. B. wissen, dass es sich um ein HTML-Dokument handelt, dessen Codierung intern spezifiziert ist, können Sie das Dokument mit einem Algorithmus analysieren, wie der im HTML-Standard skizzierte , um die Codierung zu finden und diese Codierung zu verwenden, um das Dokument zu analysieren Eine Zwei-Pass-Operation). Allerdings, nur weil ein HTML-Dokument eine Kodierung spezifiziert bedeutet es nicht, dass es mit dieser Codierung decodiert werden kann. Sie können trotzdem Fehler erhalten, wenn die Daten beschädigt sind oder wenn das Dokument nicht ordnungsgemäß codiert wurde.

Es gibt Bibliotheken wie Chardet (ich sehe dich schon erwähnt), die versuchen wird, die Kodierung eines Dokuments für dich zu erraten (es ist nur eine Vermutung, nicht unbedingt richtig). Aber sie können ihre eigenen Probleme wie Leistung haben, und sie können die Codierung Ihres Dokuments nicht erkennen.

Versuchen Sie, Ihre Funktionen in Versuch zu verpacken: außer: Anrufe.

  • Versuchen Sie Decodierung als utf-8:
  • Fange Ausnahme, wenn nicht utf-8:
  • Wenn Ausnahme ausgelöst wird, versuchen Sie die nächste Codierung:
  • Etc, etc …

Machen Sie es eine Funktion, die str zurückgibt, wenn (und wenn) es eine Kodierung findet, die nicht ausgenommen wurde, und gibt keine oder eine leere Str, wenn es seine Liste der Codierungen ausgibt und die letzte Ausnahme erhoben wird.

Wie die anderen sagten, sollte die Kodierung irgendwo aufgezeichnet werden, also überprüfe das zuerst.

Nicht effizient und ehrlich gesagt wegen meiner Fähigkeiten, kann weit weg sein, aber zu meinem Neuling Geist, kann es einige der Probleme beim Umgang mit unbekannten oder undokumentierten Kodierung zu lindern.

Umwandlung in unicode von cp437 . Auf diese Weise bekommst du deine Bytes richtig auf Unicode und zurück.

  • Python 2.7: print spricht nicht Unicode zum io-Modul?
  • Was auf der Erde ist die Unicode-Nummer?
  • Python- und Unicode-Codepunkt-Extraktion
  • Python: Wie überprüfe ich, ob ein Unicode-String ein verpacktes Zeichen enthält?
  • Python, UnicodeEncodeError, Umwandlung von Unicode in ascii
  • Deal mit Unicode-Benutzernamen in python mkdtemp
  • Wie behandle ich Unicode (Nicht-ASCII) Zeichen in Python?
  • Python json unicode - wie kann ich mit javascript eval
  • Ionen Sie durch Unicode-Strings und vergleichen Sie mit Unicode im Python-Wörterbuch
  • Python: Konvertieren Sie Unicode in ASCII ohne Fehler für CSV-Datei
  • Tornado und Unicode
  • Python ist die beste Programmiersprache der Welt.