如何处理查询参数的编码?
我原以为我网站上发送的所有数据都是utf-8格式的,因为整个网站都是用这种格式的。结果我错了。
比如说,这个例子中,字符 ä
在文档里是utf-8格式的(来自查询字符串),但当你点击提交时,它却发送了 B\xe4ule
(这可能是ISO-8859-1或windows 1252格式)。同时,它还会发送一个ajax请求,这个请求也因为尝试解码非utf-8字符而失败。
在django中,我的request.POST数据真的是一团糟:
>>> print request.POST
<QueryDict: {u'alias': [u'eu.wowarmory.com/character-sheet.xml?r=Der Rat von Dalaran&cn=B\ufffde']}>
我该怎么做才能让这些麻烦都消失,确保一切都用utf-8格式呢?
5 个回答
0
根据在PHP中将非UTF-8表单字段转换为UTF-8的内容,你需要确保网页本身是使用UTF-8编码来提供的。
1
你还应该在 <form/>
标签中加上 accept-charset="UTF-8"
。
3
从Django 1.0开始,你从表单提交中得到的所有值都是unicode对象,而不是像Django 0.96及之前版本那样的字节串。如果你想把这些值转换成utf-8格式,可以用utf-8编码来处理它们:
request.POST['somefield'].encode('utf-8')
要正确解码查询参数,首先得确保它们是正确编码的:
In [3]: urllib.quote('ä')
Out[3]: '%C3%A4'
我觉得你的问题可能是因为查询参数的编码不正确。