如何在Python中将rb模式得到的二进制类型字符串转换为普通字符串?
How to cast binary type strings obtained by rb mode to normal in Python?
我有一个二进制类型字符串的列表,看起来像这样,它是通过在 rb
模式下读取文本文件获得的(因为 r
由于可能混淆而无法读取文件来自各种编码的字符):-
new_list = [b'Vanessa Skarski\'s Account of Her Father\'s Death....', b'Hornslet wind-turbine collapse\r\nFrom 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' 并获得正常的字符串。有什么想法吗?
编辑
Convert bytes to a string? 中提到的解决方案并没有解决我在初始 post 中已经提到的问题。下面列出了我的 Python 版本,如果它与错误完全没有关系的话
3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
只需使用 'utf8'
而不是 'utf-8'
。在 Windows 10.
上使用 Python 3.7 为我工作
new_list = [b'Vanessa Skarski\'s Account of Her Father\'s Death....', b'Hornslet wind-turbine collapse\r\nFrom 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 collapse\r\nFrom Wikipedia'
<class 'bytes'>
Hornslet wind-turbine collapse
From Wikipedia
<class 'str'>
您拥有的字节对象未以 UTF-8 编码。
编码取决于文件的实际信息,没有人能告诉您如何正确编码它们,除了首先创建文件并知道使用什么编码的人。
但是,根据上下文,流行的选择可能是:
latin1
(会一直解码,但可能对你没有意义)
cp1252
Windows 系统的流行选择
因此,例如:
new_list = [item.decode(encoding='latin1') for item in new_list]
我有一个二进制类型字符串的列表,看起来像这样,它是通过在 rb
模式下读取文本文件获得的(因为 r
由于可能混淆而无法读取文件来自各种编码的字符):-
new_list = [b'Vanessa Skarski\'s Account of Her Father\'s Death....', b'Hornslet wind-turbine collapse\r\nFrom 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' 并获得正常的字符串。有什么想法吗?
编辑 Convert bytes to a string? 中提到的解决方案并没有解决我在初始 post 中已经提到的问题。下面列出了我的 Python 版本,如果它与错误完全没有关系的话
3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
只需使用 'utf8'
而不是 'utf-8'
。在 Windows 10.
new_list = [b'Vanessa Skarski\'s Account of Her Father\'s Death....', b'Hornslet wind-turbine collapse\r\nFrom 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 collapse\r\nFrom Wikipedia'
<class 'bytes'>
Hornslet wind-turbine collapse
From Wikipedia
<class 'str'>
您拥有的字节对象未以 UTF-8 编码。 编码取决于文件的实际信息,没有人能告诉您如何正确编码它们,除了首先创建文件并知道使用什么编码的人。
但是,根据上下文,流行的选择可能是:
latin1
(会一直解码,但可能对你没有意义)cp1252
Windows 系统的流行选择
因此,例如:
new_list = [item.decode(encoding='latin1') for item in new_list]