Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2010 20:51:59

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml и юникод

Здравствуйте. При попытке обработать через etree файл, содержащий русские символы, получаю исключение ‘UnicodeDecodeError: ’ascii' codec can't decode byte 0xd1 in position 947: ordinal not in range(128)'.

Код (ссылка на xml-ку рабочая):

xml_answer = urllib.urlopen('http://ws.audioscrobbler.com/2.0/?method=user.getlovedtracks&user=pOzit-tiV&api_key=b25b959554ed76058ac220b7b2e0a026&limit=50')
tree = etree.parse(xml_answer.read())
Немного поискал тут и в инете, попробовал так:
tree = etree.parse(xml_answer.read().decode('utf-8'))
и так
tree = etree.parse(xml_answer.read().encode('utf-8'))
Все равно то же самое исключение. Что делать?



Офлайн

#2 Апрель 2, 2010 21:18:04

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

В какой кодировке исходный документ вы смотрели?



Офлайн

#3 Апрель 2, 2010 21:21:03

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml и юникод

<?xml version=“1.0” encoding=“utf-8”?> — юникод.



Офлайн

#4 Апрель 2, 2010 22:29:56

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

Извиняюсь, но у меня аналогичная ситуация.

$ python pyopenGL.py
Traceback (most recent call last):
File “pyopenGL.py”, line 61, in <module>
GLUT.glutCreateWindow( u'OpenGL демонстрация' )
ctypes.ArgumentError: argument 1: <type ‘exceptions.UnicodeEncodeError’>: ‘ascii’ codec can't encode characters in position 7-18: ordinal not in range(128)

Я вообще скопировал текст в Geany из браузера, потом из Geany в Geany и всё одно и то же. Если убираю u, то программа запускается, но кириллица крокозябрами становится



Офлайн

#5 Апрель 2, 2010 22:50:26

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

скрипт в какой кодировке сохранен?
#coding:utf-8 указано?



Офлайн

#6 Апрель 3, 2010 08:01:41

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

igor.kaist
скрипт в какой кодировке сохранен?
#coding:utf-8 указано?
Конечно указано. Вот ссылка на источник, откуда я этот скрипт взял:
http://forum.script-coding.info/viewtopic.php?id=2538



Офлайн

#7 Апрель 3, 2010 10:10:52

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml и юникод

Я со своей проблемой разобрался если что.

Нужно было просто:
tree = etree.parse(xml_answer)

без read(). Плохо читал документацию просто :)



Офлайн

#8 Апрель 3, 2010 17:46:13

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

igor.kaist, с черепашкой помог мне, может всё же разберёшься с кодировкой? Самому мне не осилить. Пожалуйста!



Офлайн

#9 Апрель 3, 2010 23:58:42

likin
От:
Зарегистрирован: 2010-03-15
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

lxml и юникод

Сделай просто decode('cp1251'), оно его расшифрует в системный UTF8.
Или когда создаёщь парсер укажи ему кодировку.



Отредактировано (Апрель 4, 2010 00:01:52)

Офлайн

#10 Апрель 4, 2010 19:18:40

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

lxml и юникод

likin
Сделай просто decode('cp1251'), оно его расшифрует в системный UTF8.
Или когда создаёщь парсер укажи ему кодировку.
Ничего я ещё этого не знаю, и это мне пока только усугубляет . Почему такая бяка только с GLUT я не понимаю. Я нашёл для разборок с GL pygtkglext, там никаких плясок с бубном вокруг кодировок не нужно, достаточно одной строчки вверху, как и везде: # coding:utf-8. Кстати этот виджет можно использовать в составе окна gtk, хотя меня это не очень спасает, так как мне для начала легче осваивать wx.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version