Разбор XML ElementTree из исходного файла UTF-8
У меня есть этот файл XML с кодировкой utf-8.
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item>
<Cikkszam>00008</Cikkszam>
<EAN/>
<Megjegyzes>BISK</Megjegyzes>
<Leiras1>Bisk Ontario, Dakota szappantartóhoz</Leiras1>
<Leiras2>műanyag betét</Leiras2>
<CikkTipus>07 </CikkTipus>
<ME_>db </ME_>
<Tipus>Választható</Tipus>
<A_ar>338</A_ar>
<B_ar>0</B_ar>
<C_ar>0</C_ar>
<D_ar>0</D_ar>
<E_ar>0</E_ar>
<Tenyl_keszl_>0</Tenyl_keszl_>
<Visszaig_>0</Visszaig_>
<Diszponalt>0</Diszponalt>
<Szabad_keszlet>0</Szabad_keszlet>
</Item>
</Items>
У меня есть этот код Python:
from xml.etree.ElementTree import ElementTree
#import xml.etree.ElementTree
items = ElementTree().parse('proba.xml'.encode('utf8'))
#items = xml.etree.ElementTree.parse('proba.xml')
products = items.findall("Item")
for product in products:
print product.find("Leiras1").text
Когда я запускаю файл скрипта, я получаю следующее сообщение об ошибке:
C:\Python27>python read_xml_orig.py
Bisk Ontario, Dakota szappantartóhoz
Bisk Álló Wc kefe és papír tartó talpas
Bisk sarok szappantartó króm
Bisk sarok szappantartó króm
Bisk üveg pohár pót
Bisk ONTARIO üveg folyékony
Bisk ONTARIO üveg polc
Bisk ONTARIO dupla
Bisk ONTARIO rud
Traceback (most recent call last):
File "read_xml_orig.py", line 7, in <module>
print product.find("Leiras1").text
File "C:\Python27\lib\encodings\cp850.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0151' in position
21: character maps to <undefined>
1 ответ
'proba.xml'.encode('utf8')
кодирует строку 'proba.xml'
как UTF-8. Это ничего не делает с файлом с тем же именем.
Когда файл действительно закодирован как UTF-8, тогда ваш код будет работать:
from xml.etree.ElementTree import ElementTree
doc = ElementTree().parse('proba.xml')
products = doc.findall("Item")
for product in products:
print product.find("Leiras1").text
который печатает это для меня
Bisk Ontario, Dakota szappantartóhoz
Однако, если ваш файл на самом деле не UTF-8, вы можете получить ошибки кодирования во время .parse()
,
В этом случае вы должны выяснить, в какой кодировке находится файл, и соответствующим образом исправить объявление XML. Подсказка: вероятный кандидат на кодирование для венгерского языка Windows-1250
,