[close] [python] проблема с кодировкой

Jekich

python 2.6 под Linux'ом
Пытаюсь выполнить следующий простой скрипт
 

import sys
from lxml import etree

reload(sys)
sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding
ResponseRoot = etree.Element('RegisterEntry')
ResponseNameRu = etree.SubElement(ResponseRoot, 'NameRu')
s = 'тест'
ResponseNameRu.text = s.encode('utf-8')

Получаю ошибку
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes
Как можно побороть, подскажите плз? Каждый раз, когда сталкиваюсь с юникодом в python'е трачу уйму времени :(

chriselwart

# -*- coding: utf-8 -*-
вставь в начале каждого файла с русскими символами.
Кстати юникодные строки в питоне надо писать как u'тест', а не просто как 'тест'

Jekich

Спасибо, так и пробовала добавлять # -*- coding: utf-8 -*-
На самом деле предложенный скрипт только демонстрирует проблему, оригинальный код не хотелось выкладывать, так как он очень путанный и данные вообще изначально скачивает с сайта, а потом их парсит, обрабатывает и т.д...
Сейчас ситуация следующая. Я победила эту ошибку, сделав так
ResponseNameRu.text = unicode(s)
Что собственно и соответсвует u'тест'

>>> ResponseNameRu.text
u'\u041f\u0440\u0438\u0432\u0435\u0442'
>>> print etree.tostring(ResponseRoot, pretty_print=True)
<RegisterEntry>
<NameRu>&#1055;&#1088;&#1080;&#1074;&#1077;&#1090;</NameRu>
</RegisterEntry>
>>> type(etree.tostring(ResponseRoot, pretty_print=True
<type 'str'>

Как теперь преобразовать &в u'\u041?
Или что сделать, чтобы можно было на экран в читаемом виде вывести? :confused:

Jekich

все, разобралась у метода etree.tostring нашла параметр encoding

chriselwart

Кстати если ты пишешь парсер советую использовать немного другую связку. Посмотри модуль PyQuery. Будешь приятно удивлена.
Оставить комментарий
Имя или ник:
Комментарий: