2016-04-05 2 views
0
doc = open("1.html").read().strip() 
doc = doc.decode("utf-8","ignore") 

Dieses Beispiel ist in Ordnung. Ich kann den richtigen Unicode-String doc bekommen.Kann die Python-Zeichenkette durch die Suche nach Zeichenketten geändert werden?

doc = open("1.html").read().strip() 
if u"charset=utf" in doc or u"charset=\"utf" in doc: 
    doc = doc.decode("utf-8","ignore") 

gibt es Fehler "UnicodeDecodeError: 'ascii' Codec nicht Byte 0xe7 in Position 289 dekodieren kann: ordinal nicht in Reichweite (128)" Jeder kann dies erklären? Der String doc kann durch string find geändert werden. vergessen zu sagen, die 1.html enthalten das chinesische Wort.

Antwort

3

Das Problem besteht darin, dass Sie die Bytezeichenfolge, die Sie aus der Datei gelesen haben, mit Ihren Unicode-Literalzeichenfolgen u"charset=utf" und u"charset=\"utf" vergleichen. Um sie zu vergleichen, muss Python den Byte-String an diesem Punkt in Unicode konvertieren - bevor Sie decode manuell aufrufen - was er mit dem Standard-ASCII-Codec macht.

Die Lösung ist immer Byte-Strings mit Byte-Strings vergleichen:

if "charset=utf" in doc or "charset=\"utf" in doc: 
Verwandte Themen