python - 如何处理查询参数编码?

标签 python django unicode utf-8

我假设发送到我的参数字符串的任何数据都是 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/

相关文章:

python - 使用 python 通知

python - 使用 Buildbot 首次运行时出错

javascript - 尝试通过 URI -/uDDBA 发送加密文本导致 "URIError: URI Malformed"

ruby - 使用 Ruby 拆分 Unicode 字符串

java - 我怎样才能定义一个 map 接受不同类型的节俭值(value)?

python - 如何使用 Python 启动应用程序

python - 在 Python 中订购 Logit?

python - 如何使用 ImageSpecField 测试 Django 模型?

Django 模型 - 更改选择字段中的选项并迁移

python - 来自 unicode 字符串的 unicodecsv 阅读器不起作用?