当我在浏览器(Chrome)中提交表单时,我将变音符号“öäü”反编码为seen = set()
duplicates = set()
for path, dir, files in os.walk(Working_Dir):
for xml in files:
xmlName = xml.split('.')[1]
if xmlName in seen:
duplicates.add(xmlName)
seen.add(xmlName)
(我正在使用POST请求[表单提交]并从协议正文中获取),虽然如果我在Python中做同样的事情,我会得到%F6%E4%FC
。
现在的问题是,如果我取消引用Python编码,它可以完美地工作(如预期的那样),但是从浏览器编码失败。
有人知道为什么吗?或者至少向我解释一下?在Ubuntu上运行Python 3.4 。
%C3%B6%C3%A4%C3%BC
答案 0 :(得分:1)
您的浏览器中的字符串是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': ['öäü']}