【问题标题】:Wrong encoding when retrieving get argument检索 get 参数时编码错误
【发布时间】:2018-06-12 10:23:57
【问题描述】:

我有一个用 URL 编码编码的 url,即:/filebrowser/?cd=bank/fran%E7ais/essais

问题是,如果我通过以下方式检索参数:

path = request.GET.get('relative_h', None)

我明白了:

/filebrowser/?cd=bank/fran�ais/essais

代替:

/filebrowser/?cd=bank/français/essais

或:

/filebrowser/?cd=bank/fran%E7ais/essais

然而,%E7 确实对应于 'ç',如您所见 there

由于 %E7 是用替换字符解码的,我什至不能使用 urllib.parse.unquote 来恢复我的 'ç'...

有没有办法获取原始参数或正确解码的字符串?

【问题讨论】:

  • 只是想指出,我查看了您链接的页面,%E7 确实对应于您提供的链接上的“ç”
  • 当你说你“得到”了那个结果,你怎么知道?你是怎么输出的?您确定问题不只是在输出方法本身吗?
  • @AdamJaamour 我就是这么说的。
  • @Daniel 使用 print()。我注意到从 %08 到 %7E 的代码被 django 正确解码,但不是之后的。
  • 我的错误@FPSedin 我误读了 xD

标签: django django-2.0


【解决方案1】:

在本地运行您的示例时,在访问参数之前将请求编码切换为 latin-1 会为我返回正确解码的字符串。

request.encoding = 'latin-1'
path = request.GET.get('relative_h', None)

但是,我无法告诉您为什么会这样,因为我会假设 utf-8 的默认编码会处理该特定字符。

【讨论】:

  • 是的,我使用的是 Django 2.0。设置编码会得到什么?
  • 同样的替换字符,我也试过iso-8859-1和iso-8859-15
  • 有趣。 latin-1 和 iso-8859-1 似乎都对我有用。我想知道问题出在应用服务器还是操作系统级别。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2015-11-02
  • 2011-07-23
相关资源
最近更新 更多