python 中文转unicode编码_Python 解码 Unicode 转义字符串
其实,这里要讨论的内容是针对 Python2 的,实际上也是 Python2 中让人头疼的编码问题,而 Python3 则好处理得多。
先来看看例子:
>>> s = "我正在学Python"
>>> s
'\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python'
>>> s_u = u"我正在学Python"
>>> s_u
u'\u6211\u6b63\u5728\u5b66Python'
>>> print s
我正在学Python
>>> print s_u
我正在学Python
在 Python2 中,有两种类型的字符编码,即 str 和 unicode。而 str 是字节字符串,也就二进制数据;unicode 是文本字符串,是字节序列通过编码后的文本类型。
从上例可以看出,我们直接运行 s 或者 s_u 与用 print 打印输出是不一样的。直接运行实际上解释器是调用的 repr 方法,这样的输出表示是计算机可读的形式,也就在 Python 解释器内部是这么存储的;而用 print 输出的字符串则是人可读的,它的目的就是让人能够读懂。
那么,问题就来了,如果你得到这样的字符串:
\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python
\u6211\u6b63\u5728\u5b66Python
通过肉眼,肯定是没人能直接看出它们是什么东西的。再来看下示例:
>>> ss = "\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python"
>>> ss
'\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python'
>>> print ss
我正在学Python
>>> ss_u = "\u6211\u6b63\u5728\u5b66Python"
>>> ss_u
'\\u6211\\u6b63\\u5728\\u5b66Python'
>>> print ss_u
\u6211\u6b63\u5728\u5b66Python
也就是说,\x 开头的这种字符串与直接写中文的字符串是一样的,没有什么区别。因为它是二进制的表示,解释器可以直接表示它,输入中文的时候,解释器内部也是这么存储的。而 \u 开头的字符串解释器则不认识,因为这是一种编码,人们通过约定,用这个编码来表示这个汉字。
通常,我们在网络中接收到的字符串很多都是 \u 开头的,当我们拿到这种字符串的时候,看不出它是些什么东西,是不是很焦虑呢。实际上,这种字符串可以理解为是一种 escape 编码的字符串,也就是便于网络传输的字符串。能进行传输的,一般都是 ASCII 字符集,汉字是没法直接传输的,要传输汉字就需要把它转化成 ASCII 字符串。
要怎样才能让 \u 字符串的意思显而易见呢?我们先来分析一下,要看懂它肯定是要做一些编码转换的。首先你要清楚,你现在拿到的用双引号括起来的字符串一个 str 类型,而 str 类型是二进制的。我把这种字符串称之为 转义字符串,也就是通过汉字转义后得到的字符串,这种叫法不一定正确,只是为了便于理解。那么,我们把它转化为文本字符串是不是就可以了呢。从二进制字符串到文件字符,一般被称之为 解码,也就是 decode。这里,我们把它解码为 unicode-escape 编码的字符串:
decode("unicode-escape")
继续上边的例子:
>>> ss_uu = ss_u.decode("unicode-escape")
>>> ss_uu
u'\u6211\u6b63\u5728\u5b66Python'
>>> print ss_uu
我正在学Python
在 Python3 中,则不再会出现这样的问题。Python3 中不再有 str 和 unicode 字符类型的概念,取而代之的是 str 和 bytes 两种字符类型。str 是编码过的 unicode 文本字符,bytes 是编码前的字节序列。Python3 在编码的处理上要简单得多,它不再有所谓 unicode 字符串的概念,虽然也兼容 u"" 这样的写法,但这实际上也是一个 str 类型。如示例:
>>> s = "我正在学Python"
>>> s
'我正在学Python'
>>> print(s)
我正在学Python
>>> s_u = u"我正在学Python"
>>> s_u
'我正在学Python'
>>> print(s_u)
我正在学Python
>>> type(s)
>>> type(s_u)>>> ss_u = "\u6211\u6b63\u5728\u5b66Python">>> ss_u'我正在学Python'>>> print(ss_u)我正在学Python
python 中文转unicode编码_Python 解码 Unicode 转义字符串相关推荐
- python 中文转unicode编码_python实现unicode转中文及转换默认编码的方法
本文实例讲述了python实现unicode转中文及转换默认编码的方法.分享给大家供大家参考,具体如下: 一.在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77e ...
- 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode...
原文网址:http://blog.csdn.net/trochiluses/article/details/16825269 摘要:在进行python脚本的编写时,如果我们用python来处理网页数据 ...
- python url解码_对python中url参数编码与解码的实例详解
一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...
- python中的URL编码和解码
python中的URL编码和解码:test.py 1 # 引入urllib的request模块 2 import urllib.request 3 4 url = 'https://www.douba ...
- java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...
下列说法错误的是().A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种 更多相关问题 [名词解释] 捐躯juān qū [名词解释] 藕断丝连ǒu ...
- java 中文解码_java使用URLDecoder和URLEncoder对中文字符进行编码和解码
摘要: URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换.在本文中,我们以使用 ...
- python unicode编码_python 中文unicode编码
一. excel中写入中文报错UnicodeDecodeError : 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not ...
- python的unicode编码_python unicode编码
遇到编码问题,查阅了一些资料,有了一些理解,简单记录下. 首先,Unicode有个通用字符集 其次,每个字符有个编号(编码,即code points),规范为U+hhhh,其中每个h代表一个十六进制数 ...
- php输出字符unicode码,PHP解码unicode编码的中文字符代码分享
问题背景: 晚上在抓取某网站数据,结果在数据包中发现了这么一串编码的数据:"......\u65b0\u6d6a\u5fae\u535a......", 这其实是中文被unicod ...
最新文章
- Ethereum 君士坦丁堡安全漏洞对 FOD 的影响
- 神经网络之激活函数面面观
- Shiro中进行角色与权限认证流程
- 【机器学习基础】数学推导+纯Python实现机器学习算法18:奇异值分解SVD
- 计算机工具软件应用考试,《计算机常用工具软件》期中考试题
- Faster-rcnn详解
- SQL Server创建索引(转)
- eclipse插件svn账号信息清空重新登陆
- git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!
- Fiddler请求过滤
- php学习_第8章_PHP面向对象的程序设计
- iOS开发总结——项目目录结构
- VMware开启虚拟化实现CentOS创建KVM
- 关于-最佳的业务连续性容灾架构设计
- mysql是应用软件还是系统软件_数据库管理系统属于应用软件吗?
- python面板数据模型_面板数据模型选择问题
- 产品需求分析思路和方法
- 视频如何批量去除水印
- 前端开发学习(七七)
- windows server关闭系统自动更新
热门文章
- Nature-2018-抗菌药物组合有望特异性治疗耐多药性的细菌感染
- 宏基因组理论教程7挖掘微生物组生物标记
- php引用类型变量,PHP变量的值类型和引用类型
- R语言使用GGally包的ggparcoord函数可视化多变量的平行坐标轴图(parallel coordinates plot)、当排序点图的数据对象变多的可视化效果变差的时候
- R语言可视化图像中最常用的点样式(pch、plot characters)列表、ggpubr::show_point_shapes可视化最常用的点样式(pch)
- seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度
- pandas重命名列名称、数据列名称重命名(Rename Column Names): rename、set_axis、df.columns
- pandas批量为列名添加字符并重命名实战
- 基准分类模型、分类应用(多分类数字识别、疾病预测、欺诈检测)、监督学习总结
- python代码打印二叉树某一特定层的节点