как исправить неправильно закодированную строку? - PullRequest
0 голосов
/ 03 февраля 2010

я использовал мутаген для чтения метаданных mp3, поскольку тег id3 читается как юникод, но на самом деле он кодируется в GBK. как исправить это в питоне?

audio = EasyID3(name)
title = audio["title"][0] 
print title
print repr(title)

производит

µ±Äã¹Âµ¥Äã»áÏëÆðË­
u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'

но на самом деле он должен быть в ГБК (китайский).

当你孤单你会想起谁

Ответы [ 2 ]

4 голосов
/ 03 февраля 2010

Похоже, что строка была декодирована в Unicode с использованием неправильной кодировки (latin-1).

Вам необходимо закодировать его в байтовую строку, а затем декодировать обратно в Unicode, используя правильную кодировку.

title = u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'
print title.encode('latin-1').decode('gbk')
当你孤单你会想起谁
2 голосов
/ 03 февраля 2010

Похоже, это автоматическое декодирование с использованием latin1. Исправить:

>>> title = u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'
>>> print title.encode('latin1').decode('GBK')
当你孤单你会想起谁

Протестировано в Python 2.x, но должно работать и в 3.

...