Wie mit Unicode in Python arbeiten
-
09-09-2019 - |
Frage
Ich versuche, alle HTML aus einer Zeichenfolge zu reinigen, so dass die endgültige Ausgabe ist eine Textdatei. Ich habe einige einige der Forschung über die verschiedenen ‚Wandler‘ und fange an zu lehnen mein eigenes Wörterbuch für die Entitäten und Symbole auf die Schaffung und den Betrieb eines auf der Saite ersetzen. Ich betrachte das, weil ich den Prozess automatisieren will, und es gibt eine Menge Variabilität in der Qualität des zugrunde liegenden HTML. Vergleichen der Geschwindigkeit meiner Lösung und eine der Alternativen zum Beispiel zu beginnen pyparsing Ich ersetze von \ xa0 zu testen, entschied sich die String-Methode ersetzen verwenden. Ich erhalte ein
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
Die eigentliche Codezeile war
s=unicodestring.replace('\xa0','')
Wie auch immer, ich entschied, dass ich brauchte es mit einem r Vorwort so lief ich diese Codezeile:
s=unicodestring.replace(r'\xa0','')
Es läuft ohne Fehler, aber ich, wenn ich an einem Stück s sehe ich sehe, dass die \ xao ist immer noch da
Lösung
sein kann, sollten Sie tun
s=unicodestring.replace(u'\xa0',u'')
Andere Tipps
s=unicodestring.replace('\xa0','')
.. versucht, die Unicode-Zeichen \xa0
zu schaffen, die nicht gültig in einem ASCII-sctring ist (der Standard-String-Typ in Python bis Version 3.x)
Der r'\xa0'
Grund nicht Fehler ist, weil in einem rohen String, Escape-Sequenzen keine Wirkung. Anstatt zu versuchen, \xa0
in die Unicode-Zeichen zu kodieren, sah es die Zeichenfolge als „Backslash“, „wörtliche x“ und so weiter ..
Im folgenden sind die gleichen:
>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'
Das ist etwas in Python v3 aufgelöst, als der Standard-String-Typ Unicode ist, so dass Sie .. nur tun können,
>>> '\xa0'
'\xa0'
Ich versuche, alle HTML aus einer Zeichenfolge zu reinigen, so dass die endgültige Ausgabe eine Textdatei
ist
Ich würde empfehlen, BeautifulSoup für diese. Das Schreiben eines HTML-Reinigungswerkzeug ist schwierig (gegeben, wie schrecklich die meisten HTML ist), und BeautifulSoup hat eine große Aufgabe an beiden Parsen HTML, und den Umgang mit Unicode ..
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
<body>
<h1>
Hi
</h1>
</body>
</html>
Statt dessen ist es besser, Standard-Python-Funktionen zu verwenden.
Zum Beispiel:
string = unicode('Hello, \xa0World', 'utf-8', 'replace')
oder
string = unicode('Hello, \xa0World', 'utf-8', 'ignore')
Dabei gilt replace
\xa0
ersetzen wird \\xa0
.
Aber wenn \xa0
ist wirklich nicht sinnvoll für Sie, und Sie wollen es entfernen, dann ignore
verwenden.
Nur ein Hinweis in Bezug auf HTML Reinigung. Es ist sehr, sehr hart, da
<
body
>
Ist ein gültiger Weg HTML zu schreiben. eine nur zu ihrer Information.
Sie können es konvertieren auf diese Weise Unicode:
print u'Hello, \xa0World' # print Hello, World