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.