UnicodeEncodeError: кодек ascii не может кодировать символ

Я прочитал HOWTO в Unicode из официальных документов и полную, очень подробную статью . Тем не менее, я не понимаю, почему это порождает мне эту ошибку.

Вот что я пытаюсь: я открываю XML-файл, содержащий символы из диапазона ASCII (но внутри допустимого диапазона XML). Я делаю это с помощью cfg = codecs.open(filename, encoding='utf-8, mode='r') который работает нормально. Глядя на строку с помощью функции repr() также отображается строка юникода.

Теперь я продолжаю читать и читаю это с помощью parseString(cfg.read().encode('utf-8') . Конечно, мой XML-файл начинается с этого: <?xml version="1.0" encoding="utf-8"?> Хотя я полагаю, что это не имеет отношения к делу, я также определил utf-8 для моего скрипта python, но поскольку я не пишу символы Юникода непосредственно в нем, это не должно применяться здесь. То же самое для следующей строки: from __future__ import unicode_literals который также является правильным в начале.

Затем я xmldata.getElementsByTagName(tagName)[0].firstChild.data сгенерированный объект в свой класс, где я читаю теги в таких переменных: xmldata.getElementsByTagName(tagName)[0].firstChild.data и присваиваю его переменной в моем классе.

Теперь, что отлично работает, это команды (obj – это экземпляр класса):

 for element in obj: print element 

И эта команда тоже работает:

 print obj.__repr__() 

Я определил __iter__() чтобы просто __repr__() каждую переменную, в то время как __repr__() использует типичный материал printf: "%s" % self.varname

Обе команды отлично печатаются и могут выводить символ юникода. Что не работает:

 print obj 

И теперь я застреваю, потому что это бросает страх

 UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 47: 

Так что я пропущу? Что я делаю не так? Я ищу общее решение, я всегда хочу обрабатывать строки как unicode, чтобы избежать возможных ошибок и написать совместимую программу.

Изменить: я также определил это:

 def __str__(self): return self.__repr__() def __unicode__(self): return self.__repr__() 

Из документации я понял, что это

One Solution collect form web for “UnicodeEncodeError: кодек ascii не может кодировать символ”

Я, наконец, решил. Проблема была (я не уверен, почему), что если вы вызывали либо __str__() либо __repr__() это было бы hapyp, чтобы справиться с этим хорошо, но печать непосредственно (как в: print obj ) не работает (хотя она должна просто вызовите только __str__() ).

Последняя помощь исходила из этой статьи . Я уже получил тот шаг, на котором я получил его для печати на консоль (но неправильное письмо), когда я использовал кодировку utf-8. Наконец, решил, что это будет совершенно правильно, определив это:

 def __str__(self): return self.__repr__().encode(stdout.encoding) 

Теперь остается единственный открытый вопрос: зачем print obj.__str__() и print obj другому с этим? Для меня это не имеет никакого смысла. И да, чтобы подчеркнуть, что снова: Вызов первой или __repr__() DID работы. И все же делает это с явным кодированием.

  • Hack Jinja2 для кодирования с `utf-8` вместо` ascii`?
  • Python с проблемами юникода MySql
  • Печать Юникода в консоли eclipse Pydev и в режиме ожидания
  • Python, file (1) - Почему числа и диапазон (0x20, 0x100) используются для определения текстового или двоичного файла
  • Python - Map / Reduce - Как читать конкретное поле JSON при использовании примера count count count
  • Кодирование UTF-8 в Python
  • Как я могу использовать io.StringIO () с модулем csv?
  • python unicode обрабатывает различия между print и sys.stdout.write
  •  
    Interesting Posts for Van-Lav

    Автоматически импортировать модули при вводе интерпретатора python или ipython

    Профилирование многопроцессорного Python

    Как объединить два списка в последовательность столбцов в python?

    Вход в командную строку в Python

    Изменение глобальной переменной внутри функции

    Python: Должен ли я использовать класс или словарь?

    Где хорошее место для работы с аккаунтами / профилем в Django с приложением регистрации Django?

    Почему Python pep-8 настоятельно рекомендует использовать пробелы над вкладками для отступов?

    Передача всех аргументов функции другой функции

    Нежелательные дополнительные размеры в массиве numpy

    Как использовать ведение журнала с файловым файлом python и настроить имя файла журнала

    Django уникальный, пустой и пустой CharField, дающий ошибку «уже существует» на странице администратора

    Regex Apostrophe как совместить?

    REST API в Google App Engine + Python?

    Как отключить тайм-аут http POST, используя urlopen от urllib2 в Python?

    Python - лучший язык программирования в мире.