其实,这里要讨论的内容是针对 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 转义字符串相关推荐

  1. python 中文转unicode编码_python实现unicode转中文及转换默认编码的方法

    本文实例讲述了python实现unicode转中文及转换默认编码的方法.分享给大家供大家参考,具体如下: 一.在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77e ...

  2. 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode...

    原文网址:http://blog.csdn.net/trochiluses/article/details/16825269 摘要:在进行python脚本的编写时,如果我们用python来处理网页数据 ...

  3. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  4. python中的URL编码和解码

    python中的URL编码和解码:test.py 1 # 引入urllib的request模块 2 import urllib.request 3 4 url = 'https://www.douba ...

  5. java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...

    下列说法错误的是().A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种 更多相关问题 [名词解释] 捐躯juān qū [名词解释] 藕断丝连ǒu ...

  6. java 中文解码_java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    摘要: URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换.在本文中,我们以使用 ...

  7. python unicode编码_python 中文unicode编码

    一. excel中写入中文报错UnicodeDecodeError : 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not ...

  8. python的unicode编码_python unicode编码

    遇到编码问题,查阅了一些资料,有了一些理解,简单记录下. 首先,Unicode有个通用字符集 其次,每个字符有个编号(编码,即code points),规范为U+hhhh,其中每个h代表一个十六进制数 ...

  9. php输出字符unicode码,PHP解码unicode编码的中文字符代码分享

    问题背景: 晚上在抓取某网站数据,结果在数据包中发现了这么一串编码的数据:"......\u65b0\u6d6a\u5fae\u535a......", 这其实是中文被unicod ...

最新文章

  1. Ethereum 君士坦丁堡安全漏洞对 FOD 的影响
  2. 神经网络之激活函数面面观
  3. Shiro中进行角色与权限认证流程
  4. 【机器学习基础】数学推导+纯Python实现机器学习算法18:奇异值分解SVD
  5. 计算机工具软件应用考试,《计算机常用工具软件》期中考试题
  6. Faster-rcnn详解
  7. SQL Server创建索引(转)
  8. eclipse插件svn账号信息清空重新登陆
  9. git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!
  10. Fiddler请求过滤
  11. php学习_第8章_PHP面向对象的程序设计
  12. iOS开发总结——项目目录结构
  13. VMware开启虚拟化实现CentOS创建KVM
  14. 关于-最佳的业务连续性容灾架构设计
  15. mysql是应用软件还是系统软件_数据库管理系统属于应用软件吗?
  16. python面板数据模型_面板数据模型选择问题
  17. 产品需求分析思路和方法
  18. 视频如何批量去除水印
  19. 前端开发学习(七七)
  20. windows server关闭系统自动更新

热门文章

  1. Nature-2018-抗菌药物组合有望特异性治疗耐多药性的细菌感染
  2. 宏基因组理论教程7挖掘微生物组生物标记
  3. php引用类型变量,PHP变量的值类型和引用类型
  4. R语言使用GGally包的ggparcoord函数可视化多变量的平行坐标轴图(parallel coordinates plot)、当排序点图的数据对象变多的可视化效果变差的时候
  5. R语言可视化图像中最常用的点样式(pch、plot characters)列表、ggpubr::show_point_shapes可视化最常用的点样式(pch)
  6. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度
  7. pandas重命名列名称、数据列名称重命名(Rename Column Names): rename、set_axis、df.columns
  8. pandas批量为列名添加字符并重命名实战
  9. 基准分类模型、分类应用(多分类数字识别、疾病预测、欺诈检测)、监督学习总结
  10. python代码打印二叉树某一特定层的节点