Trotz utf8 Kodierung einige Zeichen nicht erkannt werden

Ich versuche, einen RSS mit einem News-Titel wie folgt zu kratzen:

<title>Photo of iceberg that is believed to have sunk Titanic sold at auction for £21,000 alongside &amp;#039;world&amp;#039;s most valuable biscuit&amp;#039;</title> 

Dies ist effektiv, wie ich mit schönen Suppe zu kratzen:

 soup = BeautifulSoup(xml, 'xml') start = soup.findAll('item') for i in start: news, is_created = News.create_or_update(news_id, head_line=i.title.text.encode('utf-8').strip(), ...) 

Doch trotz dieser Bemühungen bleibt der Titel so:

 Photo of iceberg that is believed to have sunk Titanic sold at auction for \xa321,000 alongside 'world's most valuable biscuit' 

Wäre es einfacher, diese Sonderzeichen in ASCII-Zeichen umzuwandeln?

2 Solutions collect form web for “Trotz utf8 Kodierung einige Zeichen nicht erkannt werden”

Für das Beispiel, das Sie zur Verfügung stellen, funktioniert das für mich:

 from bs4 import BeautifulSoup import html xml='<title>Photo of iceberg that is believed to have sunk Titanic sold at auction for £21,000 alongside &amp;#039;world&amp;#039;s most valuable biscuit&amp;#039;</title>' soup = BeautifulSoup(xml, 'lxml') print(html.unescape(soup.get_text())) 

html.unescape behandelt die HTML-Entitäten. Wenn schöne Suppe das Pfund-Zeichen nicht korrekt behandelt, müssen Sie bei der Erstellung des BeautifulSoup Objekts die Codierung angeben, zB

 soup = BeautifulSoup(xml, "lxml", from_encoding='latin-1') 

Ich glaube schließlich, das Problem gefunden zu haben. Diese Zeichen oben sind HTML in einem XML entkommen. Was für ein Chaos. Wenn man sich auf Independents RSS schaut, sind die meisten Titel so betroffen.

Das ist also kein UTF8-Problem. Wie kann ich irgendwelche HTML-Zeichen in meinem Titel oben kodieren, bevor du in UTF8 konvertierst?

 head_line=i.title.text.encode('utf-8').strip(), 

Ich löste es, indem ich den Titel mit HTMLParser entschlüsselte und ihn dann mit UTF8 kodierte. Marcos Antwort hat im Wesentlichen das gleiche. Aber die html bibliothek hat für mich nicht gearbeitet

 head_line=HTMLParser.HTMLParser().unescape(i.title.text).encode('utf-8').strip(), 

Ich empfehle nicht, from_encoding='latin-1' da es andere Probleme verursacht. Die Lösung mit unescaping und encode('utf-8') reicht aus, um das £ in \xa3 zu dekodieren, was Unicode-Zeichen ist.

  • Ist Django doppelkodiert eine Unicode (utf-8?) String?
  • Wie ausschließen U + 2028 von Line Trennzeichen in Python beim Lesen von Datei?
  • Python 3 CSV-Datei, die UnicodeDecodeError: 'utf-8' Codec kann nicht decode Byte Fehler, wenn ich drucken
  • UnicodeDecodeError: 'utf8' codec kann das Byte 0xc3 nicht in Position 34 decodieren: unerwartetes Ende der Daten
  • Python zlib Ausgabe, wie man aus mysql utf-8 Tabelle wiederherstellen?
  • Verarbeiten von nicht-englischen Text
  • UTF-8 Kodierung in Python
  • Scrapy xpath utf-8 Literale
  • Python konvertieren Unicode-Hex utf-8 Strings zu Unicode-Strings
  • Detektieren / entfernen ungepaarte Leihmarke in Python 2 + GTK
  • Erhöhtes Verständnis von Unicode in Python (2.7)
  • Python ist die beste Programmiersprache der Welt.