Мне нужно прочитать XML файл на Python и захватить различные вещи, и я столкнулся с разочаровывающей ошибкой с Unicode Encode Error, которую я не мог понять даже с помощью googling.
Вот фрагменты моего кода:
#!/usr/bin/python
# coding: utf-8
from xml.dom.minidom import parseString
with open('data.txt','w') as fout:
#do a lot of stuff
nameObj = data.getElementsByTagName('name')[0]
name = nameObj.childNodes[0].nodeValue
#... do more stuff
fout.write(','.join((name,bunch of other stuff))
Это впечатляюще сбой, когда имя, которое я обрабатываю, содержит знак Euro. Вот ошибка:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 60: ordinal not in range(128)
Я понимаю, почему знак Euro подведет его (потому что он на 128, верно?), но я думал, что нужно делать # кодирование: utf-8 исправит это. Я также попытался добавить .encode(utf-8), чтобы вместо него выглядело имя
name = nameObj.childNodes[0].nodeValue.encode(utf-8)
Но это тоже не работает. Что я делаю не так? (Я использую Python 2.7.3, если кто-то хочет знать)
РЕДАКТИРОВАТЬ: Python выходит из строя в строке fout.write() - он будет проходить отлично, где поле имени похоже:
<name>United States, USD</name>
Но будет дерьмо на поля имени, например:
<name>France, € </name>