Кодирование кода кодирования Unicode Python не в диапазоне <128> с знаком Euro

Я должен прочитать XML-файл на Python и захватить различные вещи, и я столкнулся с разочаровывающей ошибкой с Unicode Encode Error, которую я не мог понять даже при поиске в Google.

Вот фрагменты моего кода:

#!/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> 

2 Solutions collect form web for “Кодирование кода кодирования Unicode Python не в диапазоне <128> с знаком Euro”

когда вы открываете файл на python, используя open встроенную функцию, вы всегда будете читать файл в ascii. Чтобы получить доступ к нему в другой кодировке, вам необходимо использовать кодеки:

 import codecs fout = codecs.open('data.txt','w','utf-8') 

Похоже, вы получаете данные Unicode из вашего синтаксического анализатора XML, но вы не кодируете его, прежде чем записывать его. Вы можете явно закодировать результат, прежде чем записывать его в файл:

 text = ",".join(stuff) # this will be unicode if any value in stuff is unicode encoded = text.encode("utf-8") # or use whatever encoding you prefer fout.write(encoded) 
  • Печать японских (китайских) персонажей
  • Обнаружение символов не-ascii в строке unicode
  • time.strptime () - аргумент 0 должен быть str, а не байтами
  • UnicodeEncodeError при использовании метода pandas to_sql на фрейме данных с именами столбцов Unicode
  • UnicodeEncodeError: кодек ascii не может кодировать символы
  • Поиск символов Юникода в Python
  • «Unicode Error» unicodeescape »кодек не может декодировать байты ... Не удается открыть текстовые файлы в Python 3
  • Unbaking mojibake
  • Python - лучший язык программирования в мире.