如何修复"导入的文件编码错误:'charmap'编解码器无法解码位置 21221:字符映射到"位置 21221 中的字节0x9d"错误?



我正在尝试将csv文件导入我的django项目。直到现在,我以前这样做的时候我从来没有遇到过问题。但是,突然间,当我尝试导入 csv 文件时,我不断收到此错误,说"导入的文件编码错误:'charmap'编解码器无法解码位置 21221:字符映射到的字节0x9d"。

我不明白为什么我会收到错误

[!在此处输入图像描述][1]][1]

这就是我一直得到的。

我正在尝试像这样导入我的 excel 文件: [![在此输入图像描述][2]][2]

这是我的 CSV 文件的样子: [![在此输入图像描述][3]][3]

\

csv 文件包含您尝试解释它的编码的无效数据。根据它的生成方式,你也许能够告诉Python当你打开它时要应用的正确解码是什么

f = open(csv_file_name, encoding= ...)

或者你可以在生成 CSV 文件时指定适当的编码,或者你可能正在处理狡猾的数据并且不得不求助于encoding="latin-1"——这可能会导致将错误数据放入你的数据库中,如果你在保存之前没有通过 Django 表单验证 csv 文件的内容。

我建议始终通过 Django 表单或模型表单处理 csv 数据行。它可以很容易地捕获错误(表单无效,form.errors等(并打印出有用的错误消息,说明行的哪个字段(列(出了什么问题。

这里和这里还有更多

十六进制字符 9d 不是可打印字符 (https://www.codetable.net/hex/9d(。在 unicode 中,它似乎是某种命令。您需要清理此字符才能在 csv 文件中处理它。

编辑:正如@snakecharmerb在评论中指出的那样,有些编码是有效的字符。但是,从您的问题中我怀疑您没有使用其中之一。

您还可以查看decode以允许您指定用于读取数据的字符集。如果您有一个字符集,您认为这是一个有效的字符集,那么也许您的例程正在从系统中选取不同的默认字符集。

我实际上做了这样的事情来确保我正确设置瑞典字符。这是提取字段时直接来自我的代码

output.decode('iso-8859-1').strip()

最新更新