【发布时间】:2012-10-28 14:37:08
【问题描述】:
我在使我的网站与重音字符兼容时遇到了一些问题(法语网站)。
我有一个表单,其中一些字段值可以带有重音字符:例如“Coupé”。
我的网址如下所示:
http://localhost:8080/recherches/s?marque=Audi&modeles=A5+Coup%C3%A9
在我的 django 视图中,我执行以下操作:
def search(request):
logger = logging.getLogger('custom')
criteria_form = CriteriaForm(request.GET or None)
logger.debug("search")
logger.debug(request.GET)
我在日志中得到的是:
<QueryDict: {u'marque': [u'Audi'], u'modeles': [u'A5 Coup\xc3\xa9']}>
如果我用这个变量“modeles”查询我的数据库,我会得到一个错误:
>>> mo = u'A5 Coup\xc3\xa9'
>>> Vehicule.objects.filter(valid=True, modele=mo)[0].marque.name
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 211, in __getitem__
return list(qs)[0]
IndexError: list index out of range
如果我使用 utf-8 版本查询数据库,一切正常:
>>> mo = 'A5 Coup\xc3\xa9'
>>> Vehicule.objects.filter(valid=True, modele=mo)[0].marque.name
u'Audi'
所以我认为(但我可能错了)我的问题来自于我的变量是 utf8 然后用 unicode 编码的事实。
这是怎么编码的?
第一次回复后更新:
在发送表单的页面的标题上有:
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
但是,如果我在 views.py 中打印编码:
logger.debug(request.encoding)
然后我得到无。
但我不知道如何设置此编码。我以为它会像我上面所做的那样来自标题......
我的 HTTP_ACCEPT_CHARSET 中也有这个:
HTTP_ACCEPT_CHARSET ISO-8859-1,utf-8;q=0.7,*;q=0.3
可以从这里来吗?如果是,我应该如何改变它?
【问题讨论】:
-
我更新了上面的帖子。我以为它是用 UTF-8 编码的,但是当我在 django views.py 中检查 request.encoding 时,我得到 None ...我不知道如何设置这种编码:/