2014-03-13 14 views
8

Ich habe noch nie mit dem Codieren und Decodieren von Strings gearbeitet, also bin ich der Neuling an dieser Front. Ich erhalte einen UnicodeEncodeError, wenn ich versuche, den Inhalt, den ich aus einer anderen Datei gelesen habe, mit file.write in Python in eine temporäre Datei zu schreiben. Ich erhalte folgende Fehlermeldung:Fehler beim Schreiben einer Datei mit file.write in Python. UnicodeEncodeError

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 41333: ordinal not in range(128) 

Hier ist, was ich in meinem Code mache. Ich lese eine XML-Datei und bekomme den Text vom "mydata" -Tag. Ich iterieren dann durch mydata für CDATA suchen

parser = etree.XMLParser(strip_cdata=False) 
    root = etree.parse(myfile.xml, parser) 
    data = root.findall('./mydata') 
    # iterate through list to find text (lua code) contained in elements containing CDATA 
    for item in myData: 
     myCode = item.text 

    # Write myCode to a temporary file. 
    tempDirectory = tempfile.mkdtemp(suffix="", prefix="TEST_THIS_") 
    file = open(tempDirectory + os.path.sep + "myCode.lua", "w") 

    file.write(myCode + "\n") 
    file.close() 

es mit dem UnicodeEncodeError schlägt fehl, wenn ich die folgende Zeile getroffen:

file.write(myCode + "\n") 

Wie soll ich richtig kodieren und diese entschlüsseln?

+0

Welche Python-Version geschehen? – metatoaster

+0

Verwenden von Python 2.7 – user2643864

+0

möglich Duplikat von [UnicodeEncodeError beim Schreiben in eine Datei] (http://stackoverflow.com/questions/6939692/unicodeencodeerror-when-writing-to-a-file) –

Antwort

16

Die Funktion open von Python2.7 behandelt Unicode-Zeichen nicht transparent wie python3. Es gibt extensive documentation on this, aber wenn Sie Unicode-Strings ohne Decodierung direkt schreiben möchten, können Sie versuchen, diese

>>> import codecs 
>>> f = codecs.open(filename, 'w', encoding='utf8') 
>>> f.write(u'\u201c') 

Zum Vergleich, das ist, wie der Fehler

>>> f = open(filename, 'w') 
>>> f.write(u'\u201c') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 0: ordinal not in range(128) 
+0

Arbeitete großartig. Genau das, was ich brauchte. Vielen Dank. – user2643864

Verwandte Themen