[python]——关于中文字串与URL编码之间的转化

搜索baidu与google时会发现打进去的中文在地址栏里变成了“%XX%XX”格式的字符串。这种东西,在网上搜了一下资料,发现是一种被称为“URL编码”的东西。

然而同样的中文转出来的URL编码也会有不同,比如百度和电玩巴士就不一样~~

百度用的是GBK格式,一个中文字符转为%xx%xx,共两组

而电玩巴士用的utf-8格式,一个中文字符转为%xx%xx%xx,共三组

以下是网上摘到的某篇文章,很受用(嗯嗯……偶真不愧是饮水思源的好水民):

http://python.djhui.net/post/30.html

(假如链接失效也没关系,因为所有原文中涉及到的代码,这里都重编并写在了下面)

需要将中文转成url编码,只需要使用python提供的urllib库就可以。

>>>import sys,urllib

>>>s = "空之境界"

>>>print s

空之境界

>>> urllib.quote(s)

'%BF%D5%D6%AE%BE%B3%BD%E7'    ---->请注意,原作者这里输出的是utf-8格式,而我却是gbk

所以,为了保证按照指定的格式输出,调用sys库下面提供的函数

>>>s_utf=s.decode(sys.stdin.encoding).encode("utf-8")    # 若想要gbk格式则把这行里的"utf-8"换成"gbk"

>>> print s_utf

绌轰箣澧冪晫         # 嗯……竟然是乱码,不过这个不用管它~

>>> urllib.quote(s_utf)

'%E7%A9%BA%E4%B9%8B%E5%A2%83%E7%95%8C'     # 数一数,正好十二组,也就是四个汉字

至于与quote方法相对应的,则是unquote方法,作用是还原被quote函数转码过的字串。

>>>urllib.unquote(urllib.quote(s)) ---->出来的结果是s字符串本身

唯一需要在意的是这句:

s.decode(sys.stdin.encoding).encode("utf-8")   

将一个字符串s先使用系统标准编码方式进行解码,再将其结果重新编码为指定的格式。在我自己的系统上,sys.stdin.encoding就等于"gbk"

此外,在python里对字符串操作太方便了,实在是太方便了……

s="abcd"

s=s[:-2]

于是s变成了"ab",这行代码在c++和java里能用这么几个字符就搞定么……

你可能感兴趣的:([python]——关于中文字串与URL编码之间的转化)