我假设发送到我的参数字符串的任何数据都是 utf-8,因为这是我的整个网站始终使用的。瞧,我错了。
对于 this example文档中的 utf-8 字符 ä
(来自查询字符串)但继续发送 B\xe4ule
(ISO-8859-1 或 windows 1252) 当您点击提交时。它还会触发 ajax request。这也无法尝试解码非 utf8 字符。
在 django 中,我的 request.POST 真的搞砸了:
>>> print request.POST
<QueryDict: {u'alias': [u'eu.wowarmory.com/character-sheet.xml?r=Der Rat von Dalaran&cn=B\ufffde']}>
我怎样才能让所有这些令人头疼的事情消失并在 utf8 中工作?
最佳答案
从 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'
我认为您的问题来自查询参数的错误编码。
关于python - 如何处理查询参数编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526965/