Уведомления

Группа в Telegram: @pythonsu

#1 Март 8, 2009 21:02:58

vvivan
От:
Зарегистрирован: 2009-03-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

Кое что я уже прочитал по этой теме, но ничего не помогает.
Суть в следующем, читаю файл, получаю определенную строку с русским текстом. Если выводить в консоль методом print эту строку, то все отображается корректно. Но мне нужно преобразовать строку в список, и вывести сам список (пока, в дальнейшев выводиться будут только отдельные его элементы). И вот тут-то проблема - выводится unicode-строка. Если разделять не просто строку из файла, а конструкцию unicode(строка), вываливается с ошибкой ‘ascii’ codec can't decode byte 0xd0 in position 18…

	import string
f=open('2', 'r+')
for line in f:
d=string.split(unicode(line),'|||')
print d



Офлайн

#2 Март 8, 2009 21:24:07

bobry
От:
Зарегистрирован: 2008-08-03
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

а в какой кодировке русский текст?
насколько я помню unicode принимает в качестве второго параметра исходную кодировку, например:
unicode('Some string', ‘cp-1251’)



Офлайн

#3 Март 8, 2009 22:25:37

vvivan
От:
Зарегистрирован: 2009-03-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

Исходный текст в юникоде. Пробовал пересохранить в другие, но эффекта нет. Пробовал и со вторым параметром, то же самое…



Офлайн

#4 Март 9, 2009 02:17:15

bobry
От:
Зарегистрирован: 2008-08-03
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

если он уже в юникоде, то за чем тебе unicode()
вообще все это можно записать немного короче

f = open('2', 'r+')
for line in f.readlines():
d = line.split('|||')
print d



Отредактировано (Март 9, 2009 02:17:38)

Офлайн

#5 Март 9, 2009 10:14:20

vvivan
От:
Зарегистрирован: 2009-03-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

если без unicode(), то в консоль выводится строка вида \xd0\xa1\xb1 и так далее…Если с unicode(), то выдает ошибку…



Офлайн

#6 Март 9, 2009 10:43:17

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

vvivan
Исходный текст в юникоде.
в юникоде, или в утф-8 ? Потому что это разные вещи.
Я делал :
l=s.decode('utf8','ignore')



Офлайн

#7 Март 9, 2009 11:24:13

vvivan
От:
Зарегистрирован: 2009-03-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

тащемта да, исходный в utf-8.
Попробовал последний совет, строки видоизменились, теперь выглядят как u'\u041c\u0438'
Текст, набранный латинскими буквами, а также цифры отображаются нормально в обоих вариантах.

И да, никто не учитывает, что если выводить line - то все отображается корректно, а вот если ее делить на список, получается вот такая фигня…



Офлайн

#8 Март 9, 2009 11:35:06

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

vvivan
тащемта да, исходный в utf-8.
Попробовал последний совет, строки видоизменились, теперь выглядят как u'\u041c\u0438'
ну у тебя теперь юникод, с которым можно работать.
А перед выводом :
ll=l.encode('cp866','ignore')
естесственно - кодировка может быть любая.



Офлайн

#9 Март 9, 2009 11:37:58

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

vvivan
И да, никто не учитывает, что если выводить line - то все отображается корректно, а вот если ее делить на список, получается вот такая фигня…
попробуй принт не всего списка, а его одного элемента )



Офлайн

#10 Март 9, 2009 12:13:03

vvivan
От:
Зарегистрирован: 2009-03-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError при разбиении строки на список

alexzander77
попробуй принт не всего списка, а его одного элемента )
О! Так работает! Только интересно узнать почему так?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version