【问题标题】:Django and UnicodeDecodeErrorDjango 和 UnicodeDecodeError
【发布时间】:2012-05-04 16:28:43
【问题描述】:

我在做什么...

___我有一个上传表单,我可以从该表单上传带有图片的 .zip 文件。每次当文件标题带有一些非 ascii 字符 äüõ 时,我都会收到 unicode 解码错误。

 title = ' '.join([filename[:filename.rfind('.')], str(count)])

错误:

这一行生成图片的标题,而这正是给我错误的行:'utf8' codec can't decode byte 0x82 in position 2: invalid start byte. You passed in 'cr\x82ations' (<type 'str'>)

我想做什么:

我也试过.decode('utf-8')。但无论我尝试什么,每次都得到相同的结果。

我在 site.py 中阅读了有关将默认 djangos ascii 更改为 utf-8 的信息,但不确定它是否会有所帮助,并且很确定我不想这样做。

感谢任何帮助。

【问题讨论】:

  • 你应该使用decode(),是的,但你确定它是UTF-8吗?

标签: django utf-8 decode


【解决方案1】:

Django 有一些有用的实用方法可供您使用。

见:https://docs.djangoproject.com/en/dev/ref/unicode/#conversion-functions

我想代码可能看起来像这样:

from django.utils.encoding import smart_str

title = ' '.join([smart_str(filename[:filename.rfind('.')]), str(count)])

【讨论】:

    【解决方案2】:

    我也相信首先使用 .decode() 是正确的选择,但是,您使用的代码页 ('utf-8')) 可能不正确。您可以尝试“1252”或其他一些吗?以下是您可能感兴趣的一些标准编码 [链接]http://docs.python.org/library/codecs.html?highlight=arabic

    【讨论】:

      【解决方案3】:

      失败的原因是你尝试加入一个普通的str对象:

      代替

      ' '.join(..)
      

      使用:

      u' '.join(..)
      

      或者使用以下方法让您的生活更轻松:

      from __future__ import unicode_literals
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        相关资源
        最近更新 更多