3 Stimmen

Lesen von UTF-8 XML und Schreiben in eine Datei mit Python

Ich versuche, UTF-8 XML-Datei zu parsen und einige Teile davon in eine andere Datei zu speichern. Problem ist, dass dies mein erstes Python-Skript überhaupt ist und ich bin völlig verwirrt über die Zeichenkodierung Probleme, die ich finde.

Mein Skript schlägt sofort fehl, wenn es versucht, Nicht-Ascii-Zeichen in eine Datei zu schreiben, aber es kann es an der Eingabeaufforderung ausgeben (zumindest auf einer gewissen Ebene)

Hier ist die XML (von den Teilen, die zumindest wichtig, es ist eine *.resx-Datei, die UI-Strings enthält)

<?xml version="1.0" encoding="utf-8"?>
<root>
     <resheader name="foo">
          <value>bar</value>
     </resheader>
     <data name="lorem" xml:space="preserve">
          <value>ipsum öä</value>
     </data>
</root>

Und hier ist mein Python-Skript

from xml.dom.minidom import parse

names = []
values = []

def getStrings(path):
    dom = parse(path)
    data = dom.getElementsByTagName("data")

    for i in range(len(data)):
        name = data[i].getAttribute("name")
        names.append(name)
        value = data[i].getElementsByTagName("value")
        values.append(value[0].firstChild.nodeValue.encode("utf-8"))

def writeToFile():
    with open("uiStrings-fi.py", "w") as f:
        for i in range(len(names)):
            line = names[i] + '="'+ values[i] + '"' #varName='varValue'
            f.write(line)
            f.write("\n")

getStrings("ResourceFile.fi-FI.resx")
writeToFile()

Und hier ist der Traceback:

Traceback (most recent call last):
  File "GenerateLanguageFiles.py", line 24, in 
    writeToFile()
  File "GenerateLanguageFiles.py", line 19, in writeToFile
    line = names\[i\] + '="'+ values\[i\] + '"' #varName='varValue'
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in ran
ge(128)

Wie kann ich mein Skript so anpassen, dass es UTF-8-Zeichen richtig liest und schreibt? Die Dateien, die ich zu generieren versuche, würden in der Testautomatisierung mit Robots Framework verwendet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X