【问题标题】:Django 'ascii' codec can't encode characterDjango'ascii'编解码器无法编码字符
【发布时间】:2013-08-01 05:11:49
【问题描述】:

在 Django 中我想使用一个简单的模板标签来截断数据。

这是我目前所拥有的:

@register.filter(name='truncate_simple')
def truncate_char_to_space(value, arg):
    """
    Truncates a string after a given length.
    """
    data = str(value)
    if len(value) < arg:
        return data

    if data.find(' ', arg, arg+5) == -1:
        return data[:arg] + '...'
    else:
        return data[:arg] + data[arg:data.find(' ', arg)] + '...'

但是当我使用它时,我得到以下错误:

{{ item.content|truncate_simple:5  }}

错误:

'ascii' 编解码器无法对位置 84 中的字符 u'\u2013' 进行编码:序数不在范围内(128)

错误在线开始data = str(value)

为什么?

【问题讨论】:

  • 您是否尝试将“from future import unicode_literals”添加到 python 文件的顶部?

标签: django django-templates


【解决方案1】:

尝试使用 unicode() 转换值(而不是 str()):

data = unicode(value)

【讨论】:

  • 完美,但你能解释一下吗。
  • 请不要随意建议添加编码声明。这个问题与此无关 - 它用于定义源文件中字符文字的编码。
  • @DanielRoseman 关于编码声明是正确的。解码字符 unicode(value) 就足够了。
【解决方案2】:

如果您使用的是 django 和 python 2.7,这会为我解决这个问题:

from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class Utente(models.Model):

https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.encoding.python_2_unicode_compatible

【讨论】:

  • 这是最好的答案!谢谢!!!但是你忘记了 from django.utils.encoding import python_2_unicode_compatible
  • 谢谢,这解决了我的问题。
【解决方案3】:

@max4ever 的答案对我有用。 有时你也应该把这一行放在 python 文件的头部:

from __future__ import unicode_literals

在解决像这样的 unicode 编码问题时会很有帮助。

【讨论】:

    【解决方案4】:

    在 settings.py 中添加这个

    import sys
    reload(sys)
    sys.setdefaultencoding('UTF8')
    

    【讨论】:

    • 这实际上是个坏主意,因为它可能会破坏使用不同编码的库。
    猜你喜欢
    • 2015-11-21
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2015-10-21
    • 2010-12-11
    • 2015-01-21
    相关资源
    最近更新 更多