gpt4 book ai didi

Python3 - Chrome 奇怪的 urldecode 与 urllib.parse.parse_qs()

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:52 24 4
gpt4 key购买 nike

当我在浏览器 (Chrome) 中提交表单时,我得到变音符号“öäü”,编码为 %F6%E4%FC (我使用的是 POST 请求 [表单提交] 和从协议(protocol)主体中得到的),尽管如果我在 Python 中执行相同的操作,我会得到 %C3%B6%C3%A4%C3%BC

现在的问题是,如果我取消引用 Python 编码,它可以完美工作(如预期),但浏览器的编码失败。

有人知道为什么吗?或者至少给我解释一下?在 Ubuntu 上运行 Python 3.4

>>> import urllib.parse
>>> urllib.parse.quote('öäü')
'%C3%B6%C3%A4%C3%BC'
>>> urllib.parse.parse_qs('v=' + _)
{'v': ['öäü']}
>>> urllib.parse.parse_qs('v=' + '%F6%E4%FC') # That encoded String from the Browser
{'v': ['���']}

最佳答案

浏览器中的字符串采用 latin-1 编码,urllib.parse 使用 utf-8,如果您使用 latin-1 作为编码,则使用 urllib.parse.quote 会得到相同的输出:

In [32]: urllib.parse.quote('öäü',encoding="latin-1")
Out[32]: '%F6%E4%FC'

"FC" 和其他十六进制值是字符的 ISO Latin 1 数值:

In [34]: "\xFC"
Out[34]: 'ü'
In [38]: "\xF6"
Out[38]: 'ö'

要获得正确的输出,您需要指定正确的编码:

In [40]: urllib.parse.parse_qs('v=' + '%F6%E4%FC',encoding="latin-1")
Out[40]: {'v': ['öäü']}

有一个从 U+0000 到 U+00FF here 的 utf-8 代码点列表,ISO Latin 1 代码为 here

关于Python3 - Chrome 奇怪的 urldecode 与 urllib.parse.parse_qs(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com