原始文字为تانزھ,UTF-8编码
表单页编码为GBK(这个没法改),原始文字通过表单页提交后被浏览器编码为%811%842%811%839%811%870%811%850%811%930
(这是什么鬼- -b)
用python的urllib.quote试着编码了一下,结果是%D8%AA%D8%A7%D9%86%D8%B2%DA%BE
(这个跟utf-8编码的表单页提交的编码结果是一样的)
GBK环境的编码规则是怎么样的(GBK没法编阿拉伯文字),如何用python模拟实现
*浏览器为FF30 & IE9,win7
*python版本为2.7.3,linux
1
Septembers 2015-04-02 00:20:24 +08:00 via Android
|
2
liemehoc OP |
3
liemehoc OP 非常好奇为什么编码是%xxx这样三位的,网上搜了繁体中文的,是前面两位跟第三位一起编,然后用big5解码,但是这个阿拉伯文的就不知道是怎么弄的了
|
4
aaaa007cn 2015-04-03 10:14:54 +08:00 1
gbk 根本就无法直接编码阿拉伯文字
https://html.spec.whatwg.org/multipage/forms.html#url-encoded-form-data 按照标准 在 gbk 编码下提交时 浏览器应该先把“تانزھ”转换成“&#数值;”的形式 然后再编码成 %26%231578%3B%26%231575%3B%26%231606%3B%26%231586%3B%26%231726%3B ت => 0x062A(1578) => ت => %26%231578%3B 但是 这些字符却可以在 gb18030 下进行编码 也就是你看到的 %811%842%811%839%811%870%811%850%811%930 或者更确切地表示为 %81%31%84%32%81%31%83%39%81%31%87%30%81%31%85%30%81%31%93%30 每个字符对应 4 个字节,比如 ت => 0x062A => \x81\x31\x84\x32 => %81%31%84%32 => %811%842 至于 python 2 urllib.quote 其实只接受字节串 尝试以 gbk 编码将报 UnicodeEncodeError 错误 只能编码为 gb18030 正确的写法应当是 urllib.quote(u'\u062A\u0627\u0646\u0632\u06BE'.encode('gb18030')) urllib.quote(u'تانزھ'.encode('gb18030')) # 如果你的文件编码为 utf-8 urllib.quote('تانزھ'.decode('utf-8').encode('gb18030')) # 如果你的文件编码为 utf-8 urllib.quote('تانزھ') # 如果你的文件编码为 gb18030 所以你是怎么在表单页编码为 gbk 时观察到编码为 gb18030 才会有的编码结果的 -_-||| |