上一篇文章主要讨论了字符编码的不同方式,这一篇文章着重谈谈对python的编码解码的理解。

python2

在python2中主要有两种类型的字符类型,一个是str,一个是Unicode。平时我们默认操作的字符串类型是str,在字符串前面加一个u就是Unicode类型。

这两个类型有相应的工厂方法:str()和unicode()

上图的例子中可以看出,unicode方法将传入的string,利用传入的encoding将string转换成unicode对象。注意最后的错误是因为python默认的编码方式是ASCII编码格式。

>>>import sys

>>>sys.getdefaultencoding()

'ascii'

string类型和unicode类型分别拥有str.decode()和unicode.encode()方法。我们实验一下:

>>>a_unicode=u 'Hi \u2119'               #长度为4

>>>to_string=a_unicode.encode('utf-8')

>>>to_string

'Hi \xe2\x84\x99'                    #这里长度为6

>>>type(to_string)

'str'

>>>to_new_unicode=to_string.decode('utf-8')

>>>to_noe_unicode==a_unicode

True #这里python2中两者是相等的,但是python3中不相等。

>>>asc_string=a_unicode.encode()

UnicodeEncodeError:'ascii' not in range(128) #上面讲过python默认编码是ascii,而ascii只能表示128的字符,\u2119超出了ascii的可编码范围,所以错误

>>>asc_unicode=to_string.decode()

UnicodeEncodeError:'ascii' not in range(128) #这里利用ascii解码utf-8编码过的字符,出现同样的错误。

>>>to_string.encode('utf-8')

UnicodeEncodeError:'ascii' not in range(128)

上述代码,最后一个错误尤其要注意,尝试将一个字符串类型编码成utf-8编码格式,在python内部要经过两个步骤:将字符串转换成unicode,接着将转换后的unicodeencode成'utf-8'格式即:to_string.decode(sys.getdefaultencoding).encode('utf-8')。因为默认为ascii编码,不能转换\xe2,所以出现错误。

从上述错误我们要注意两点:

在转换的时候,明确转换的字符串的类型,确认是str还是unicode

明白python内部包含的隐式转换方法。

参考资料:

http://nedbatchelder.com/text/unipain.html

https://docs.python.org/2/howto/unicode.html

http://blog.csdn.net/trochiluses/article/details/16825269

python的unicode编码表_python中Unicode编码初探相关推荐

  1. python中unicode编码表_Python中的字符串操作和编码Unicode详解

    本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧. 字符串类型 str:Unicode字符串.采用''或者r''构造的字符 ...

  2. UniCode编码表,过滤不可见特殊字符

    不可见字符过滤方案 我是在项目中,使用freemarker生成word时,wordxml不能解析不可见字符,导出导出的word报错,不能正常打开. 于是我将freemarker解析后的xml进行了不可 ...

  3. 【Unicode编码表】UniCode编码表+转化器

    UniCode编码表[转载:https://www.cnblogs.com/csguo/p/7401874.html] Unicode编码则是采用双字节16位来进行编号,可编65536字符,基本上包含 ...

  4. punycode转码以及UniCode编码表参考文章

    Punycode是什么? Punycode是一个根据RFC 3492标准而制定的编码系统,主要用於把域名从地方语言所采用的Unicode编码转换成为可用於DNS系统的编码.Punycode可以防止ID ...

  5. 汉字Unicode编码表(最小值0x4e00,最大值0x952f)

    汉字的unicode编码最小值为:0x4e00,最大值为0x952f 关于 unicode编码表: 1unicode编码表   Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, ...

  6. CSS中文字体 Unicode 编码表

    一.简介 CSS(层叠样式表)是用于样式化Web页面的强大工具,它可以用来控制页面的外观和行为.在CSS中,可以使用多种字体来设置文本的外观和格式,包括中文字体.中文字体的实现需要引入相应的字体文件, ...

  7. charCodeAt() 方法了解和用法unicode编码表

    前言:最近在看一些算法题,发现有时候借用到charCodeAt方法,所以趁此机会来学习一下(●ˇ∀ˇ●) 什么是charCodeAt? MDN的解释: charCodeAt() 方法返回 0 到 65 ...

  8. [转] UniCode编码表

    Unicode编码则是采用双字节16位来进行编号,可编65536字符,基本上包含了世界上所有的语言字符,它也就成为了全世界一种通用的编码,而且用十六进制4位表示一个编码,非常简结直观,为大多数开发者所 ...

  9. Unicode编码表/0000-0FFF

    Unicode编码表/0000-0FFF 图例: Unicode 3.1 Unicode 1.0 Unicode 3.2 Unicode 1.1 Unicode 4.0 Unicode 2.0 Uni ...

最新文章

  1. Java 链接MySQL数据库时报的connect和denied错解决方法
  2. Python for in 问题
  3. 论面向组合子程序设计方法 之 重构
  4. $$和$BASHPID区别
  5. 用ajax写无限循环,ajax无限循环
  6. dede 5.7 任意用户重置密码前台
  7. OpenNMS全接触-事件及通知(九)
  8. 基于python的文件加密传输_基于python实现文件加密功能
  9. Python学习笔记之列表(三)
  10. atitit查询表修改表字段没反应--解锁锁定的表
  11. UG NX 10 草图基础知识和概念
  12. 坐火车硬座20小时是怎样的体验?
  13. 010-java 表单方式或者base64方式上传图片,后端使用nutz的post转发图片到另一个请求...
  14. Vue首屏加载等待动画
  15. 3. PyCharm、PyQt5、PyQt5-tools的下载安装、基于PyCharm开发PyQt5
  16. 双离合档把上按钮作用_帕萨特档杆按钮作用是什么
  17. LED背光源运用于小型收款机
  18. ScalaNote24-模式匹配和高阶函数练习题
  19. 贝叶斯网专题1:信息论基础
  20. [转帖]房博士教你购房(五)

热门文章

  1. 登录医疗机构无法连接到远程服务器,敬业签桌面便签软件登录提示“无法连接到远程服务器”解决办法...
  2. 智慧盲盒系统开发实例分享
  3. 关于数藏行业自律,元宇宙产业委为何要连发三次?
  4. SQL必知必会第十八节挑战题
  5. DB2数据库UTF-8字符集的汉字占3个字节
  6. 项目管理流程怎样才能标准化?
  7. Qt中文乱码解决办法
  8. 在Vue中应用TypeScript
  9. C#Web项目中导出数据为Excel
  10. linkedin android,LinkedIn领英(com.linkedin.android) - 6.0.126 - 应用 - 酷安