You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 1.9添加含Unicode的模型时触发UnicodeDecodeError问题求助

解决Django 1.9中UnicodeDecodeError的问题

嘿,这个错误我之前帮朋友排查过!本质原因很明确:你在读取上传的cvfile内容时,用UTF-8编码去解码了一个非UTF-8格式的文件——那个0x96字节是Windows-1252编码里的长破折号,UTF-8完全不识别它,所以就抛出了解码错误。

结合你提到重写了save方法,我猜你应该是在把上传文件的内容读取出来存到cv这个TextField里对吧?给你几个实用的解决办法:

方法一:多编码兜底尝试

优先用UTF-8解码,失败了就用Windows-1252(Windows系统生成的文档常用这个编码)兜底,这样能兼容更多场景:

class Clean(models.Model):
    name = models.CharField(max_length=100)
    cv = models.TextField(max_length=10000, blank=True, null=True)
    cvfile = models.FileField(validators=[validate_file_extension])

    def save(self, *args, **kwargs):
        if self.cvfile:
            file_content = self.cvfile.read()
            try:
                get_text = file_content.decode('utf-8')
            except UnicodeDecodeError:
                # 兜底处理Windows常用编码
                get_text = file_content.decode('windows-1252')
            self.cv = get_text
        # 一定要调用父类的save方法
        super(Clean, self).save(*args, **kwargs)

方法二:忽略或替换错误字符

如果那些特殊字符对你来说不重要,可以直接让解码时忽略错误,或者用占位符替换:

# 用?替换无法解码的字符
get_text = file_content.decode('utf-8', errors='replace')
# 或者直接忽略错误字符
get_text = file_content.decode('utf-8', errors='ignore')

额外小建议

如果是面向普通用户的功能,最好在上传页面加个提示,告诉用户尽量上传UTF-8编码的文档(比如用记事本保存时选择UTF-8编码),这样能从源头减少这类问题~

内容的提问来源于stack exchange,提问作者Yunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:23:12