jsnjack jsnjack - 1 month ago 15
Python Question

How to convert a string from CP-1251 to UTF-8?

I'm using mutagen to convert ID3 tags data from CP-1251/CP-1252 to UTF-8. In Linux there is no problem. But on Windows, calling

on a wx.TextCtrl produces the error:


UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
0: ordinal not in range(128)


The original string (assumed to be CP-1251 encoded) that I'm pulling from mutagen is:

u'\xc1\xe5\xeb\xe0\xff \xff\xe1\xeb\xfb\xed\xff \xe3\xf0\xee\xec\xf3'


I've tried converting this to UTF-8:

dd = d.decode('utf-8')


...and even changing the default encoding from ASCII to UTF-8:

sys.setdefaultencoding('utf-8')


...But I get the same error.

Answer

If you know for sure that you have cp1251 in your input, you can do

d.decode('cp1251').encode('utf8')