Wenn man unicode (string) und string.encode ('utf-8') in python verwendet

Ich hatte einige seltsame Charaktere, die mit Spreadsheet-Zelldaten durchkamen, ich habe versucht, es mit Codierung ('utf-8') zu lösen, wie es vorgeschlagen wurde. Es hat das Problem nicht gelöst, aber als ich Unicode (String) benutzte, funktionierte es. Meine Frage ist da ein Standard-Weg, um mit allen Arten von Textdaten umzugehen?

One Solution collect form web for “Wenn man unicode (string) und string.encode ('utf-8') in python verwendet”

Um es ganz im Grunde zu sagen, ist eine "Zeichenfolge" ("Unicode-String" in python2 und nur "string" in python3) eine Folge von "Zeichen". Aber "Charakter" ist eine Abstraktion, es gibt keine Möglichkeit, ein Zeichen in einem Dateisystem zu speichern oder es über das Netzwerk zu senden (klingt seltsam, aber es gibt wirklich nicht). Dateisysteme, Netzwerke, Konsolen und andere Geräte verstehen nur "Bytes". Deshalb ist es Ihre Aufgabe als Programmierer, Zeichen in Bytes korrekt zu übersetzen und umgekehrt, wenn du mit einem Gerät oder einem externen Programm sprichst.

Chars-to-Bytes-Übersetzung heißt "encode ()" in python. Wenn du einen String an ein Gerät schickst, kannst du deine Zeichen in Bytes verschlüsseln:

 some_chunk_of_bytes = some_string.encode(how_exactly) 

Es gibt viele Möglichkeiten (genannt "Zeichenkodierungen"), um ein Zeichen als eine Kombination von Bytes darzustellen, daher musst du den Encoder erklären, wie genau du es machen willst.

Wenn du die Daten irgendwo liest, bekommst du nur rohe Bytes und musst sie zu bedeutungsvollen Zeichen entschlüsseln:

 some_string = some_chunk_of_bytes.decode(how_exactly) 

Wieder müssen Sie angeben, wie Sie denken, dass diese Bytes codiert sind (es gibt keine Möglichkeit, sicher zu sagen).

Es gibt eine Reihe von Verknüpfungen in Python, die diese Codierung / decodieren Zeug von Ihnen zu verstecken. Beispielsweise,

  string = unicode(bytes) 

Tut dies hinter den Kulissen:

  string = bytes.decode(default-encoding) 

Und wenn du etwas so einfaches machst wie

 print string 

Es ist eigentlich:

 sys.stdout.write(string.encode(default-encoding)) 

Aber auch wenn du keine encode/decode explizit nimmst, musst du erkennen, dass es noch irgendwann stattfinden muss. Wenn Sie in Ihrem Programm verstümmelte Zeichen haben, ist es immer, weil Sie:

  • Den "encode" -Schritt vergessen, oder
  • Den "decode" -Schritt vergessen, oder
  • Eine falsche "Kodierung"

Wie gesagt, diese Beschreibung ist sehr einfach, wenn Sie alle Details verstehen wollen, lesen Sie bitte

  • Das Absolute Minimum Jeder Software-Entwickler Absolut, Positiv muss über Unicode und Zeichensätze wissen (keine Entschuldigungen!)
  • Und was jeder Programmierer absolut, muss unbedingt wissen, über Encodings und Zeichen Sets, um mit Text zu arbeiten
  • Konvertieren von Unicode in Python
  • Python: Split Unicode-String auf Wortgrenzen
  • Python bekommen Zeichencode in verschiedenen Codierung?
  • Entfernen Sie Akzentzeichen Zeichenfolge - Python
  • Python: Entfernen eines bestimmten Zeichens (u "\ u2610") aus String
  • Lesen von Unicode-Dateidaten mit BOM-Zeichen in Python
  • Wörterbuch mit Schlüssel in Unicode
  • Wie man Unicode-String mit python3 macht
  • Programmatisch sagen, ob ein Unicode-Zeichen mehr als einen Zeichenraum in einem Terminal aufnimmt
  • Wie man meinen Unicode aus der Unicode-Byte-Darstellung abruft
  • Verwenden eines Unicode-Formats für Pythons `time.strftime ()`
  • Python ist die beste Programmiersprache der Welt.