Python 3可以';读入时不能解码某些字符

Python 3可以';读入时不能解码某些字符,python,python-3.x,unicode,Python,Python 3.x,Unicode,我有一些超级简单的代码试图打开一个文件,但它包含一些中文/阿拉伯语字符,我相信这阻止了我打开它。我不知道如何修改文件以允许它打开这些字符。我的代码很简单 a_file = open("test2.txt") lines = a_file.readlines() print(lines) 我的错误信息是 UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2948: character

我有一些超级简单的代码试图打开一个文件,但它包含一些中文/阿拉伯语字符,我相信这阻止了我打开它。我不知道如何修改文件以允许它打开这些字符。我的代码很简单

a_file = open("test2.txt")
lines = a_file.readlines()
print(lines)
我的错误信息是

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2948: character maps to <undefined>
UnicodeDecodeError:“charmap”编解码器无法解码位置2948中的字节0x81:字符映射到
我该如何解决这个问题?谢谢

错误消息

UnicodeDecodeError:“charmap”编解码器无法解码位置2948中的字节0x81:字符映射到

告诉您无法使用系统默认编码对文件中的字节进行解码(“charmap”编解码器无法解码”消息通常在使用的Windows系统上显示。)

如果文件包含中文或阿拉伯语字符,则打开文件时使用的正确编码更有可能是UTF-8或UTF-16

请注意,ISO-5589-1/latin-1编码将对任何字节进行解码,但结果可能没有意义,因为它是一种8位编码,只能表示256个字符

>>s=你好,世界'
>>>bs=s.encode('utf-8')
>>>打印(bs.解码('ISO-8859-1'))
你好ï¼ä¸ç

Python假定您希望使用UTF-8编码将文件从字节转换为字符串。位置2948处的字符0x81在该位置是非法的。在文本编辑器中打开文件时,您会看到什么?你希望Python阅读什么?您可能想尝试
open(“test2.text”,encoding=“ISO-8859-1”)
,这是一种更宽松的编解码器。@FrankYellin很管用,谢谢!如果你想添加评论,我会接受你的回答。您能否详细说明为什么添加的部分使其工作?谢谢@弗兰克耶林用拉丁语1来解码中文或阿拉伯文是个坏建议。ISO-8859-1编码不包含中文或阿拉伯文字符,除了ASCII数字
0
9
,它们通常被称为“阿拉伯数字”。使用拉丁语-1来解码阿拉伯语文本“毫无例外”有效,但会破坏输入。我同意你的观点。但他确实读了近3000个字。我的主要建议是打开文件,看看它读了什么。ISO-8859-1的优点是它几乎可以阅读任何东西;如果你的目标只是在不知道东西是什么的情况下移动东西(而原来的海报显然不知道),那么它会很有用。