文档章节

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

开源中国段子手
 开源中国段子手
发布于 2016/02/06 23:39
字数 555
阅读 1330
收藏 9

搜索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里能用这么几个字符就搞定么……

© 著作权归作者所有

共有 人打赏支持
开源中国段子手
粉丝 43
博文 178
码字总数 95519
作品 0
南京
程序员
python利用utf-8编码判断中文英文字符(转)

下面这个小工具包含了判断unicode是否是汉字、数字、英文或者其他字符,全角符号转半角符号,unicode字符串归一化等工作。 !/usr/bin/env python -- coding:GBK -- """汉字处理的工具:判断u...

ranvane
2015/08/18
0
0
详解 python 中文编码与处理

注意:本文只是针对 python 2,在 python 3 中,编码方式与处理技巧有些许变化,具体请参考: Python 2 与 Python 3 的差异对比: http://my.oschina.net/leejun2005/blog/173553 一、使用中...

大数据之路
2012/08/24
0
0
也谈 Python 的中文编码处理

最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。 很快,我就遇到了异常: Python代码 UnicodeEncodeErr...

我的去哈哈
2014/02/12
0
0
Python Unicode与中文处理(转)

Python Unicode与中文处理 python中的unicode是让人很困惑、比较难以理解的问题,本文力求彻底解决这些问题; 1.unicode、gbk、gb2312、utf-8的关系; http://www.pythonclub.org/python-bas...

coldlemon
2014/01/04
0
0
python 的 string 和 PyQt 的 QString 的区别

以下在 Python2.6和PyQt4.4.4 for Python2,6环境下讨论: Python中有两种有关字符的类型:Python string object和Python Unicode object。主要使用Python string object进行数据输入输出。 ...

不必在乎朕是谁
2013/08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据框架对比:Hadoop、Storm、Samza、Spark和Flink

简介 大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性、规模...

hblt-j
26分钟前
2
0
正则介绍及grep/egrep用法

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data 9.1 正则介绍_grep上 什么是正则 ...

zgxlinux
41分钟前
2
0
想用Unity3D引擎软件赚点钱的看过来

前言: 你可以不拥有很多钱 但你一定要有赚钱的能力 目前手上有项目, 需要熟练Unity3D引擎软件的伙伴 有意向的给我发私信

猿神出窍
44分钟前
2
0
Spring Boot全局异常处理

Spring Boot默认的异常处理机制 默认情况下,Spring Boot为两种情况提供了不同的响应方式。 一种是浏览器客户端请求一个不存在的页面或服务端处理发生异常时,一般情况下浏览器默认发送的请求...

狼王黄师傅
今天
8
0
Thinkphp5 优雅配置两个数据库

工作需要需要配置两个数据库,框架5.0的,步骤如下: 1、在database.php同级创建一个database2.php文件 在里面配置第二个数据库信息, 2、在config中配置这个数据库信息: 3、创建第二个表的...

wqzbxh
今天
5
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部