【问题标题】:How to convert list of bytes (unicode) to Python string?如何将字节列表(unicode)转换为 Python 字符串?
【发布时间】:2014-06-29 04:22:13
【问题描述】:

我有一个字节列表(8 位字节,或者在 C/C++ 语言中它们形成 wchar_t 类型字符串),它们形成一个 UNICODE 字符串(逐字节),如何将这些值转换为 Python 字符串,尝试了很少有东西,但没有人可以将这 2 个字节连接成 1 个字符并从中构建一个完整的字符串。谢谢。

【问题讨论】:

    标签: python string unicode


    【解决方案1】:

    通过在 str(在 Python 2.x 中)或 bytes (Python 3.x) 对象上调用 decode() 方法来将字节序列转换为 Unicode 字符串。

    如果你确实有一个字节列表,那么,要获取这个对象,你可以使用''.join(bytelist)b''.join(bytelist)

    您需要指定用于编码原始 Unicode 字符串的编码。

    但是,术语“Python 字符串”有点含糊,而且还取决于版本。 Python str 类型在 Python 2.x 中代表字节字符串,在 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
    

    【讨论】:

    • 出色的答案,您为我节省了很多时间,因为这是我第一次尝试 Python :),非常感谢 Lev
    • Python 3 的演示?
    • @stackprotector in Python 3,答案中的Out[3] 将显示一个常规(Unicode)字符串。输出 4 将打印字符串(几乎相同)。
    【解决方案2】:

    您还可以使用decode() 将字节列表转换为字符串列表

    stringlist=[x.decode('utf-8') for x in bytelist]
    

    【讨论】:

    • 这仅适用于 ASCII 字节。其他任何事情失败,因为您无法将b'\x7f' 上的任何值解码为 UTF-8,这就是此答案中的代码将执行的操作。鉴于 OP 已声明它们具有来自 C++ wchar_t 数据类型的 8 位字节,因此几乎 保证 不是 ASCII UTF-8。跨度>
    【解决方案3】:

    以下是最适合我的方法:

    import codecs
    
    print(type(data)) # <class 'bytes'>
    data: str = codecs.decode(data, 'UTF-8')
    

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 2017-04-16
      • 2012-03-22
      • 2013-02-05
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多