GBK 环境下阿拉伯文字的 urlencode 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liemehoc
V2EX    问与答

GBK 环境下阿拉伯文字的 urlencode 问题

 1  
  •   liemehoc 2015-04-02 00:03:22 +08:00 3053 次点击
    这是一个创建于 3854 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原始文字为,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

    6 条回复    2015-04-04 10:56:18 +08:00
    liemehoc
        2
    liemehoc  
    OP
       2015-04-02 00:48:19 +08:00
    @Septembers

    escape('');
    "%u062A%u0627%u0646%u0632%u06BE"

    表单的accept-charset属性为空,应该是继承了页面的编码gbk
    liemehoc
        3
    liemehoc  
    OP
       2015-04-02 00:51:27 +08:00
    非常好奇为什么编码是%xxx这样三位的,网上搜了繁体中文的,是前面两位跟第三位一起编,然后用big5解码,但是这个阿拉伯文的就不知道是怎么弄的了
    aaaa007cn
        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 才会有的编码结果的 -_-|||
    liemehoc
        5
    liemehoc  
    OP
       2015-04-04 10:44:30 +08:00
    @aaaa007cn 抱歉,一直以为gbk和gb18030是一样的,问题解决了,感谢!
    liemehoc
        6
    liemehoc  
    OP
       2015-04-04 10:56:18 +08:00
    @aaaa007cn 确认原表单页为gb18030-_-|||,是我搞混了
    链接的资源很给力,收藏了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 12:06 PVG 20:06 LAX 05:06 JFK 08:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86