错误:"';ascii';编解码器可以';t解码“位置”中的字节0xd8;在Python 3中

错误:"';ascii';编解码器可以';t解码“位置”中的字节0xd8;在Python 3中,python,unicode,utf-8,python-3.3,Python,Unicode,Utf 8,Python 3.3,我写了一个程序,递归搜索文件夹中具有特定扩展名的文件,并进行一些处理。奇怪的是,该程序在大约85个文件的情况下运行良好,然后每次都在同一个文件上崩溃。我认为这个文件或文件名没有什么不同。因为它可以运行85个文件,所以我知道错误不在于我的代码本身,而在于错误的编译器 操作系统:Linux北极3.2.0-4-amd64#1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux 错误详细信息(完整回溯): 回溯(最近一次呼叫最后一次): 文件“scoretotal.p

我写了一个程序,递归搜索文件夹中具有特定扩展名的文件,并进行一些处理。奇怪的是,该程序在大约85个文件的情况下运行良好,然后每次都在同一个文件上崩溃。我认为这个文件或文件名没有什么不同。因为它可以运行85个文件,所以我知道错误不在于我的代码本身,而在于错误的编译器

操作系统:
Linux北极3.2.0-4-amd64#1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux

错误详细信息(完整回溯):

回溯(最近一次呼叫最后一次):
文件“scoretotal.py”,第98行,在
main()
文件“scoretotal.py”,第96行,主
查找分数文件()
文件“scoretotal.py”,第89行,在find_score_文件中
总计=计算总计((os.path.join(根目录,文件名)))
文件“scoretotal.py”,第14行,在计算总计中
行=文件\对象\读取。读取()
文件“/soft/linux/bin/。/python3.3.3/lib/python3.3/encodings/ascii.py”,第26行,解码
返回编解码器。ascii_解码(输入,自身错误)[0]
UnicodeDecodeError:“ascii”编解码器无法解码位置17中的字节0xd8:序号不在范围内(128)

我正在运行
python3.3.3
。从我在网上的研究来看,这可能与unicode或UTF-8格式有关,但就我个人而言,我无法理解。出了什么问题?

你熟悉“和”或“和”之间的区别吗?…这些(我称之为)漂亮的引语往往会毁掉蟒蛇节

可能不是这样,但肯定与文件中的字符集有关。如图所示:


我建议您尝试捕捉,除了错误和转换为ascii。

您熟悉“和”或“和”之间的区别吗?…这些(我称之为)漂亮的引号往往会毁掉蟒蛇节

可能不是这样,但肯定与文件中的字符集有关。如图所示:


我建议使用try-catch,除了错误和强制转换为ascii。

当您打开一个文件而不指定编码时,Python将为您选择一个;在您的情况下,它选择了
ascii
,这是相当安全的,因为它不太可能返回错误字符,但很容易出错。您需要检查这些文件的源,以查找其编码并将其包含在
打开
调用中。例如,如果您确定这些文件是使用ISO-8859-1编码编写的:

file_object_read = open(path, 'r', encoding='iso-8859-1')

如果你不知道使用什么编码,你就必须猜测,并承认有时你的猜测是错误的。在Linux上你可以尝试
'utf-8'
,在Windows上你可以尝试
'mbcs'
,因为这些是那些系统上其他程序使用的默认值。有一些实用程序可以检查文件内容和try进行有根据的猜测,包括。

当您打开一个文件而不指定编码时,Python将为您选择一个;在您的情况下,它选择了
ascii
,这是相当安全的,因为它不太可能返回错误的字符,但很容易出错。您需要检查这些文件的源代码以确定是否正确找出它们的编码,并将其包含在
打开
调用中。例如,如果您确定文件是使用ISO-8859-1编码编写的:

file_object_read = open(path, 'r', encoding='iso-8859-1')

如果你不知道使用什么编码,你就必须猜测,并承认有时你的猜测是错误的。在Linux上你可以尝试
'utf-8'
,在Windows上你可以尝试
'mbcs'
,因为这些是那些系统上其他程序使用的默认值。有一些实用程序可以检查文件内容和tr我想做一个有根据的猜测,包括。

哪个操作系统?它有很大的不同。@Markransem:Linux,从回溯的外观来看。.你给了我们一个不完整的回溯。你能给我们完整的回溯吗?触发这个的代码也会很有帮助。实际上,这个文件名很可能有点奇怪。我想起来了在我的问题中注明了完整的回溯和操作系统的详细信息。哪个操作系统?它有很大的不同。@Markransem:Linux,从回溯的外观来看。。你给了我们一个不完整的回溯。你能给我们完整的回溯吗?触发此回溯的代码也会很有帮助。很可能这一部分有点奇怪事实上是ar文件名。我更新了我的问题,以包括操作系统的完整回溯和详细信息。我不熟悉这些引号。因此,据我所知,您怀疑此特定文件包含这些“漂亮的引号”Python不能解码它们?我不熟悉这些引号。所以据我所知,你怀疑这个特定的文件包含这些“漂亮的引号”,Python不能解码它们?有趣的是,我会说“windows-1252”是windows上最流行的文件字符集。@AlastairMcCormack“mbcs”这不是一种实际的编码,它只是告诉Python使用您的Windows版本配置。大多数情况下,它将与“Windows-1252”完全相同。知道这一点太棒了!感谢您的更正:)有趣的是,我会说“Windows-1252”是Windows上最流行的文件字符集。@AlastairMcCormack“mbcs”不是实际的编码,它只是告诉Python使用您配置的Windows版本。大多数情况下,它与“Windows-1252”完全相同。知道这一点太棒了!谢谢您的更正:)