Python3 Chrome奇怪的url解码urllib.parse.parse_qs()

2024-10-04 07:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在浏览器(Chrome)中提交一个表单时,我得到的umlauts“äü”被重新编码为%F6%E4%FC(我使用的是POST请求[form submit]并从协议体中获得),但是如果我在Python中做同样的操作,我得到%C3%B6%C3%A4%C3%BC

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

有人知道为什么吗?或者至少给我解释一下?在Ubuntu上运行Python3.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': ['���']}

Tags: 代码form协议表单编码parse浏览器urllib
1条回答
网友
1楼 · 发布于 2024-10-04 07:26:38

浏览器中的字符串是拉丁1编码的,urllib.parse使用utf-8,如果使用拉丁语-1作为编码,则使用urllib.parse.quote公司名称:

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

"FC"和其他十六进制值是用于字符的ISO拉丁1数值:

^{pr2}$

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

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

{1{U+U是一个从U到0的拉丁码

相关问题 更多 >