Dosyaya xml.dom.minidom
nesnesinden içerik yazmayı deniyorum.Dosyaya XML yazılması python dosyasında yozlaştırır dosyaları
import codecs
def write_xml_native():
# Building DOM from XML
xmldoc = minidom.parse('semio2.xml')
f = codecs.open('codified.xml', mode='w', encoding='utf-8')
# Using native writexml() method to write
xmldoc.writexml(f, encoding="utf=8")
f.close()
sorun dosyada olmayan latin kodlanmış metin bozarsa şudur: basit bir fikir 'WriteXml' yöntemi kullanmaktır.
def write_xml():
# Building DOM from XML
xmldoc = minidom.parse('semio2.xml')
# Opening file for writing UTF-8, which is XML's default encoding
f = codecs.open('codified3.xml', mode='w', encoding='utf-8')
# Writing XML in UTF-8 encoding, as recommended in the documentation
f.write(xmldoc.toxml("utf-8"))
f.close()
Bu aşağıdaki hatası:
Traceback (most recent call last):
File "D:\Projects\Semio\semioparser.py", line 45, in <module>
write_xml()
File "D:\Projects\Semio\semioparser.py", line 42, in write_xml
f.write(xmldoc.toxml(encoding="utf-8"))
File "C:\Python26\lib\codecs.py", line 686, in write
return self.writer.write(data)
File "C:\Python26\lib\codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 2064: ordinal not in range(128)
nasıl bir XML metin dosyasına yazıyorsunuz başka yolu metin dizesi almak ve açıkça dosyaya yazmaktır? Benim neyim eksik?
EDIT. Hata kodu decode ifadesi eklenerek giderilir: f.write(xmldoc.toxml("utf-8").decode("utf-8"))
Ancak Rusça sembolleri hala bozuk.
Bir yorumlayıcıda görüntülendiğinde, ancak dosyada yazıldığı zaman metin bozuk değil.
with open("codified.xml", "w") as f:
f.write(xmldoc.toxml("utf-8").decode("utf-8"))
Bu (gerçi, Python 3 altında) benim için çalışıyor:
Sadece bir düşünce: Emin misin? dosyayı yanlış görüntülemiyorsunuz? Belki okuyucu utf-8'den başka bir kodlamayı bekliyor ve sadece borklu görünüyor. – Nubsis
@Nubsis Bu tam olarak ne oluyordu. Görüntüleyici ASCII kodlamasını bekliyordu. Ancak ipucunu tutacağım çünkü .decode() kullanmak da sorun oldu. Teşekkürler! – martinthenext