如何在 Python 中将 rb 模式获得的二进制类型字符串转换为正常字符串



我有一个列表,其中包含如下所示的二进制类型字符串,它是通过rb模式下读取文本文件获得的(因为r由于可能从各种编码中混淆字符而无法读取文件(:-

new_list = [b'Vanessa Skarski's Account of Her Father's Death....', b'Hornslet wind-turbine collapsernFrom Wikipedia' .....]

列表中共有 271 个项目。但我希望列表项是普通字符串而不是二进制字符串。我已经考虑使用 new_list = [item.decode(encoding='utf-8') for item in new_list]

但它给了UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 643: invalid start byte.我只是想摆脱 b' 并获得正常的字符串。有什么想法吗?

编辑将字节转换为字符串中提到的解决方案?没有解决我在最初的帖子中已经提到的问题。下面列出了我的 Python 版本,如果这与错误有任何关系

3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

您拥有的字节对象未以 UTF-8 编码。执行取决于文件的实际信息,除了最初创建文件并知道使用了什么执行的人之外,没有人可以告诉您如何正确编码它们。

但是,考虑到上下文,流行的选择可能是:

  • latin1(将始终解码,但可能对您没有意义(
  • cp1252 Windows系统的热门选择

因此,例如:

new_list = [item.decode(encoding='latin1') for item in new_list]

只需使用 'utf8' 而不是 'utf-8' 。在Windows 3.7上使用Python 10为我工作。

new_list = [b'Vanessa Skarski's Account of Her Father's Death....', b'Hornslet wind-turbine collapsernFrom Wikipedia']
for item in new_list:
    decoded_item = item.decode('utf8')
    print(item)
    print(type(item))
    print(decoded_item)
    print(type(decoded_item))
    print()

输出:

b"Vanessa Skarski's Account of Her Father's Death...."
<class 'bytes'>
Vanessa Skarski's Account of Her Father's Death....
<class 'str'>
b'Hornslet wind-turbine collapsernFrom Wikipedia'
<class 'bytes'>
Hornslet wind-turbine collapse
From Wikipedia
<class 'str'>

最新更新