кто поможет разобраться с записью не латинских знаков при записи через tree.write(xmlfile)
Сначала беру текст из csv файла и занопу в tuple:
try: with open(sys.argv[1],"r" ) as csvfile: emails = csv.reader(csvfile, delimiter=b';') for row in emails: pn_tuple.append(row) except IOError as e: print(e.errno, e.strerror) print("Cannot open file",sys.argv[1])
потом создаю необходимое дерево xml и вкладываю некоторые поля из тапла
root = ET.Element("log") root.set("action","add") pn = len(pn_tuple) for i in range(len(pn_tuple)): xtag_mailbox = ET.SubElement(root,"mailbox") xtag_login = ET.SubElement(xtag_mailbox,"login") xtag_login.text = pn_tuple[i][0] xtag_fname = ET.SubElement(xtag_mailbox, "firstname") xtag_fname.text = pn_tuple[i][3]
tree = ET.ElementTree(root) with open("file.xml", "w+", encoding='utf-8') as file: tree.write(file, xml_declaration=True, encoding='utf-8')
в конце вылетает ошибка:
Traceback (most recent call last): File "./mail.py", line 133, in <module> tree.write(file, xml_declaration=True, encoding='utf8') File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 820, in write serialize(write, self._root, encoding, qnames, namespaces) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml _serialize_xml(write, e, encoding, qnames, None) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml _serialize_xml(write, e, encoding, qnames, None) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 937, in _serialize_xml write(_escape_cdata(text, encoding)) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1073, in _escape_cdata return text.encode(encoding, "xmlcharrefreplace") UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 4: ordinal not in range(128)
Данные в тапле выглядат следующим образом:
'Lenka', 'Do\xc4\x8dkalov\xc3\xa1'
подскажите как мне записать такие вот знаки через tree.write
спасибо