Форум сайта python.su
x - строка в кодировке cp1251 (содержит русский текст)
мне нужно конвертнуть ее в utf-8
x= tag.getArtist()
print type(x), x
x.decode(“cp1251”).encode(“UTF-8”)
print x
вот этот кусочек скрипта вываливает мне ошибки такого вида:
user@host:~/python$ ./test.py test.mp3
<type ‘unicode’> Òàòó
Traceback (most recent call last):
File “./test.py”, line 13, in <module>
x.decode(“cp1251”).encode(“UTF-8”)
File “encodings/cp1251.py”, line 15, in decode
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-3: ordinal not in range(128)
В чем тут дело может быть?
Офлайн
у вас строка уже в unicode, не в cp1251. об этом говорит вывод print type(x)
<type ‘unicode’>
декодировать из cp1251 нету никакого смысла. последние 2 строки должны быть:
y = x.encode('utf-8')
print y
Офлайн
У тебя tag.getArtist() уже unicode.
Т.е. хватит x.encode("utf8')
Офлайн
bialixнасколько я понимаю unicode это просто внутренний способ хранения строк в питоне и он может содержать строку в любой кодировке.
у вас строка уже в unicode, не в cp1251. об этом говорит вывод print type(x)
<type ‘unicode’>
декодировать из cp1251 нету никакого смысла. последние 2 строки должны быть:
y = x.encode('utf-8')
print y
Отредактировано (Окт. 19, 2007 17:16:56)
Офлайн
да, забыл сказать. родная кодировка в консоли у меня utf-8
Офлайн
duxaНеправильно понимаешь. Все не так, все совсем наоборот.
насколько я понимаю unicode это просто внутренний способ хранения строк в питоне и он может содержать строку в любой кодировке.
чтобы конвертнуть из одной кодировки в другую, питон должен знать исходную кодировку и конечную.
Офлайн
bialixэтим я непременно займусь =)duxaНеправильно понимаешь. Все не так, все совсем наоборот.
насколько я понимаю unicode это просто внутренний способ хранения строк в питоне и он может содержать строку в любой кодировке.
чтобы конвертнуть из одной кодировки в другую, питон должен знать исходную кодировку и конечную.
Рекомендую изучить матьчасть.
Офлайн
а ты попробуй запустить свой скрипт с перенаправлением вывода в файл или через pipe:
user@host:~/python$ ./test.py test.mp3 | less
узнаешь много новых питоновских матюков
Офлайн
bialixпопробовал - ничего нового, да и откуда им взяться?
а ты попробуй запустить свой скрипт с перенаправлением вывода в файл или через pipe:
user@host:~/python$ ./test.py test.mp3 | less
узнаешь много новых питоновских матюков
Офлайн
duxa
x - строка в кодировке cp1251 (содержит русский текст)
мне нужно конвертнуть ее в utf-8
x.decode('cp1251') # декодирует строку из 1251 в юникод print x # выводит строку # запущеный в консоли питон сам в состоянии узнать в какой # кодировке твоя консоль чтобы вывести текст в правильной # кодировке. если выводить текст не в консоль а например # в файл то можно сделать чтото вроде print x.encode('utf8') # тупо отдаст на stdout строку в utf8
Офлайн