告诉我们具体平台上的 Python 版本。
显示发生错误时获得的完整回溯。你自己看看吧。出现的代码的最后一行是什么?你认为被解码的bytes 字符串是什么?为什么要使用ascii 编解码器??
请注意,使用默认编解码器(例如 ascii)将 bytes 自动转换为 str 不是由 Python 3.x 完成的。所以要么你明确地这样做,要么 cx_freeze 是。
更新在 cmets 中获得更多信息。
Excel 不以 ASCII 格式保存 csv 文件。它将它们保存在 MS 所称的“ANSI 代码页”中,该代码页因区域设置而异。如果你不知道你的是什么,那可能是cp1252。要检查,请执行以下操作:
>>> import locale; print(locale.getpreferredencoding())
cp1252
如果 Excel 确实以 ASCII 格式保存文件,那么您有问题的 '\xa0' 字节将被替换为“?”并且您不会收到 UnicodeDecodeError。
将您的文件保存在UTF-8 中需要您使用encoding='utf8' 打开您的文件,并且会遇到同样的问题(除了您会抱怨 0xc2 而不是 0xa0)。
您无需将所有四个 csv 文件都发布到网络上。只需运行这个小脚本(未经测试):
import sys
for filename in sys.argv[1:]:
for lino, line in enumerate(open(filename), 1):
if '\xa0' in line:
print(ascii(filename), lino, ascii(line))
'\xa0' 是 NO-BREAK SPACE 又名   ...您可能需要编辑文件以将其更改为普通空格。
您可能需要在 cx_freeze 邮件列表中询问以了解为什么会发生此错误。他们会想知道完整的回溯。进行一些练习——在这里展示一下。
顺便说一句,“偏移量 7338”相当大——您是否希望 csv 文件中有这么长的行?也许有些东西正在读取您的所有文件...