gpt4 book ai didi

python - Django 与 python 2.7 utf-8 问题

转载 作者:行者123 更新时间:2023-11-28 20:42:49 24 4
gpt4 key购买 nike

我在 (html) 模板中对字符进行宽度编码时遇到问题。在我的数据库中有如下结果:

  1. 查萨
  2. 希尚杰

这句话是克罗地亚语。在我的 settings.py 中,LANGUAGE_CODE我已经设定 :LANGUAGE_CODE = 'hr-HR' 也尝试使用 LANGUAGE_CODE = 'hr'。问题是当数据库以表格形式返回记录时:

category = forms.ModelChoiceField(queryset=Category.objects.all().filter(type_id="2"),
widget=forms.Select(attrs={'class': 'selectpicker'}), label=('Kategorija'),
initial='1', )

并且该字段的所有记录都必须呈现在 HTML 页面中,作为选择器。当我尝试加载该页面时出现此错误:

  1. 异常类型:UnicodeEncodeError
  2. 异常值:'ascii' 编解码器无法对位置序号不在范围 (128) 中的字符 u'\u0107' 进行编码

Python 版本:2.7.9

Django 版本:1.7.7

在我的 models.py 中,模型是:

class Category(models.Model):
id = models.AutoField(primary_key=True)
type_id = models.ForeignKey('CategoryType')
name = models.CharField(max_length=255)

def __str__(self):
return str(self.name)

我也尝试过:

  class Category(models.Model):
id = models.AutoField(primary_key=True)
type_id = models.ForeignKey('CategoryType')
name = models.CharField(max_length=255)

def __str__(self):
return self.name

你知道解决这个问题的简单方法吗,我知道 python 3 有更好的 utf 编码,但我想留在 2.7。

最佳答案

将您的 __str__ 方法更改为 __unicode__

您看到的异常来自混合编码的字节串和 Unicode 对象。为此,Python 2.x 尝试使用默认编码对 Unicode 对象进行隐式编码,如果不能则引发异常。因此,当您的默认编码为 ascii 时,u'foo' + 'bar' 有效,但 u'foo\u270c' + 'bar' 无效。

在 Django 中,模型实例上的 CharField 返回 Unicode 对象。在 Python 2.x 中,__str__ 方法应该返回编码的字节串而不是 Unicode 对象,因此返回未编码的 name 会导致 Django 混合带有字节串的 Unicode 对象。

您也可以通过在 __str__ 方法中显式编码 name 来修复它,但如果正确定义了 __unicode__,这是默认行为。

关于python - Django 与 python 2.7 utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com