如何将字节列表(unicode)转换为Python字符串?
我有一串字节(8位字节,在C/C++语言中它们形成wchar_t类型的字符串),这些字节组成了一个UNICODE字符串(一个字节一个字节地组成)。我想知道怎么把这些值转换成Python字符串。我尝试了几种方法,但都无法把两个字节合并成一个字符,也无法从中构建出完整的字符串。谢谢。
3 个回答
3
对我来说,这个方法效果最好:
import codecs
print(type(byteData)) # <class 'bytes'>
strData = codecs.decode(byteData, 'UTF-8')
15
你还可以使用 decode()
方法把字节列表转换成字符串列表。
stringlist=[x.decode('utf-8') for x in bytelist]
25
把一串字节转换成Unicode字符串,可以通过调用那个 str
(在Python 2.x中)或 bytes
(在Python 3.x中)对象的 decode()
方法来实现。
如果你手上有一个字节列表,要得到这个对象,可以用 ''.join(bytelist)
或者 b''.join(bytelist)
。
你需要指定最初编码Unicode字符串时用的编码方式。
不过,“Python字符串”这个说法有点模糊,而且还和版本有关。在Python 2.x中,str
类型代表的是字节字符串,而在Python 3.x中,它代表的是Unicode字符串。所以,在Python 2中,直接使用 ''.join(bytelist)
就会得到一个 str
对象。
Python 2的示例:
In [1]: 'тест'
Out[1]: '\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
In [2]: bytelist = ['\xd1', '\x82', '\xd0', '\xb5', '\xd1', '\x81', '\xd1', '\x82']
In [3]: ''.join(bytelist).decode('utf-8')
Out[3]: u'\u0442\u0435\u0441\u0442'
In [4]: print ''.join(bytelist).decode('utf-8') # encodes to the terminal encoding
тест
In [5]: ''.join(bytelist) == 'тест'
Out[5]: True