Найти - Пользователи
Полная версия: UnicodeDecodeError при разбиении строки на список
Начало » Python для новичков » UnicodeDecodeError при разбиении строки на список
1 2
vvivan
Кое что я уже прочитал по этой теме, но ничего не помогает.
Суть в следующем, читаю файл, получаю определенную строку с русским текстом. Если выводить в консоль методом 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
bobry
а в какой кодировке русский текст?
насколько я помню unicode принимает в качестве второго параметра исходную кодировку, например:
unicode('Some string', ‘cp-1251’)
vvivan
Исходный текст в юникоде. Пробовал пересохранить в другие, но эффекта нет. Пробовал и со вторым параметром, то же самое…
bobry
если он уже в юникоде, то за чем тебе unicode()
вообще все это можно записать немного короче

f = open('2', 'r+')
for line in f.readlines():
d = line.split('|||')
print d
vvivan
если без unicode(), то в консоль выводится строка вида \xd0\xa1\xb1 и так далее…Если с unicode(), то выдает ошибку…
alexzander77
vvivan
Исходный текст в юникоде.
в юникоде, или в утф-8 ? Потому что это разные вещи.
Я делал :
l=s.decode('utf8','ignore')
vvivan
тащемта да, исходный в utf-8.
Попробовал последний совет, строки видоизменились, теперь выглядят как u'\u041c\u0438'
Текст, набранный латинскими буквами, а также цифры отображаются нормально в обоих вариантах.

И да, никто не учитывает, что если выводить line - то все отображается корректно, а вот если ее делить на список, получается вот такая фигня…
alexzander77
vvivan
тащемта да, исходный в utf-8.
Попробовал последний совет, строки видоизменились, теперь выглядят как u'\u041c\u0438'
ну у тебя теперь юникод, с которым можно работать.
А перед выводом :
ll=l.encode('cp866','ignore')
естесственно - кодировка может быть любая.
alexzander77
vvivan
И да, никто не учитывает, что если выводить line - то все отображается корректно, а вот если ее делить на список, получается вот такая фигня…
попробуй принт не всего списка, а его одного элемента )
vvivan
alexzander77
попробуй принт не всего списка, а его одного элемента )
О! Так работает! Только интересно узнать почему так?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB