先说说什么是编码。

编码(encoding)就是把一个字符映射到计算机底层使用的二进制码。
编码方案(encoding scheme)规定了字符串是如何编码的。

python编码,其实就是对python字符串的编解码问题,这也是为什么在python中,只有字符串,才有decode和encode方法。
在python中,字符串为str类型,其父类为basestring。unicode和ascii是str类型的两种常见编码,ascii是字符串的默认编码,如 str(12)。
ascii编码的字符串,7bit,编码范围为0-0x7f;
unicode为UCS2或UCS4, UCS2为16bit,编码范围为 0 - 0xffff;UCS4的编码范围为0-0x10ffff。
unicode是python编解码的核心,不同编码转换都需要通过unicode来进行。

Unicode 简介

Unicode是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。
UCS可以看作是"Unicode CharacterSet"的缩写。

常用的中英文编码

ASCII

美国编码
American Standard Code for Information Interchange,美国信息互换标准代码,是一种7位编码方案来表示所有的大写字母、小写字母、数字、标点符号和控制字符。
编码范围:0 - 0x7f

latin-1/iso-8859-1

西欧编码
编码范围:0 - 0xff
0x00-0x7f之间完全和ASCII一致,0x80-0x9f之间是控制字符,0xa0-0xff之间是文字符号。

utf-8

Unicode Transformation Format - 8 bit
UTF-8是以8位为单元对Unicode进行编码。
UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。
英文使用8位(即一个字节),中文使用24位(即三个字节)来编码。
具体如下:
0 - 0x7f single byte
0x80 - 0x7ff two bytes, each between 128 and 255
0x7ff - : three- or four-byte sequence, each between 128 and 255

utf-16

Unicode Transformation Format - 16 bit
采用16位对unicode进行编码
UTF-16以16位为单元对Unicode进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。
对于不小于0x10000的Unicode码,定义了一个算法。

gb2312

简体中文编码
双字节等宽编码,
GB2312的编码范围是0xA1A1-0x7E7E

gbk/cp936

中文编码
双字节等宽编码,
GBK 编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。CJK就是中日韩的意思。
GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0x7F的组合。
cp936 为 windows code page

gb18030

中文编码
GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。
有单字节、双字节和四字节三种方式。
GB18030 的单字节编码范围是0x00-0x7F,完全等同与ASCII;
双字节编码的范围和GBK相同,高字节是0x81-0xFE,低字节的编码范围是0x40-0x7E和0x80-FE;
四字节编码中第一、三字节的编码范围是0x81-0xFE,二、四字节是0x30-0x39。

注:gb2312、gbk和gb18030比较

编码范围:gb18030 > gbk > gb2312。
gb2312可以看作是gbk的真子集,而gbk是gb2312的真子集。
GBK和GB2312都是双字节等宽编码,而GB18030编码是变长编码,

big5

大五码,繁体中文编码。没用过。

Python编码

在Python中,上面这些编码都需要通过unicode进行间接转换,不能直接转换。比如将utf-8编码转为gb2312编码,则需要如下转换过程

utf-8 --> unicode --> gb2312

注:utf-8 --> unicode 为解码(decode), unicode --> gb2312为编码(encode)

中文编码在Python的表示,如下图所示

注:u'中' 为unicode字符串。若字符串以 u 开头,表示字符串为unicode编码。

参考资料

1、ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解
http://blog.csdn.net/ylyuanlu/article/details/41844009
2、UTF-8 GBK UTF8 GB2312 之间的区别和关系
http://www.cnblogs.com/xiaomia/archive/2010/11/28/1890072.html

Python 编码简单说的更多相关文章

  1. (转载) 浅谈python编码处理

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

  2. Python之路3【知识点】白话Python编码和文件操作

    Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ...

  3. Python编码/文件读取/多线程

    Python编码/文件读取/多线程 个人笔记~~记录才有成长   编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...

  4. python编码详解--转自(Alex的博客)

    原文地址:http://www.cnblogs.com/alex3714/articles/7550940.html 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们 ...

  5. Python实现简单的四则运算

    GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...

  6. 说说Python编码规范

    前言 已有近两个月没有发表过文章了,前段时间外甥和女儿过来这边渡暑假,平常晚上和周末时间都陪着她们了,趁这个周末有空,再抽空再把这块拾起来.         这么久没写了,再次拿起键盘,想想,发表些什 ...

  7. 转--python 编码规范

    编程规范 1.1. 命名规范 1.1.1. [强制] 命名不能以下划线或美元符号开始和结尾 反例: name / __name / $Object / name / name$ / Object$ 1 ...

  8. PYTHON编码处理-str与Unicode的区别

    一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...

  9. Python 编码规范(Google)

    Python 编码规范(Google) https://blog.csdn.net/q469587851/article/details/54096093 Python 风格规范(Google) 本项 ...

随机推荐

  1. ArcGIS Engine开发之视图同步

    数据视图与布局视图的同步 数据视图与布局视图的同步,首先要保证数据的一致性,其次就是数据显示范围的一致性.该同步主要涉及IMapControl接口的OnMapReplaced事件和OnAfterScr ...

  2. java web之个人通讯录系统

    前天下了第一场雪,专业课老师给我们布置了一个期末小作业,真的感觉到寒假就要来临了.这个学期没过多久就要结束了.总结这学期,感觉还是有不少收获的.完成了当初许下的诺言,现在也越来越喜欢软件这个行业了,虽 ...

  3. android的消息提示(震动与提示音)

    protected AudioManager audioManager; protected Vibrator vibrator; audioManager = (AudioManager)getSy ...

  4. java编码过滤器

    1.java编码过滤器的作用: java过滤器能够对目标资源的请求和响应进行截取,过滤信息执行的优先级高于servlet. 2.java过滤器的使用: (1)编写一个普通的java类,实现Filter ...

  5. 软件海贼团 OnePiece (版权所有)

    最近迷上了“海贼王”这部动画片,不仅仅是因为其中的人物个个性格鲜明,剧情跌宕起伏扣人心弦,各种耍宝搞笑,还感觉到这个团队很像理想中的敏捷软件团队. 作为一直带团队的我,感觉“海贼王”这个动画片给了我很 ...

  6. 高级数据过滤(like)

    单字符过滤 '_' select * from T_Employee where FName like  '_erry' 多字符过滤 '%' select * from T_Employee wher ...

  7. PostgreSQL杀掉死锁的链接

    查到对应的用户的活动连接: select * from pg_stat_activity where username="xxx"; 杀掉死锁的连接: select pg_term ...

  8. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

    1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...

  9. 树莓派3B初始化后一些必须的设置

    接上一篇,SSH已经登录成功(http://www.cnblogs.com/crosys/p/6220108.html) 1.树莓派系统的设置 1.1扩展系统空间 因为内存卡还有很多空间没有分配,第一 ...

  10. stm32 usb error : identifier "bool" is undefined

    .\usb\USB\usb_pwr.h(54): error:  #20: identifier "bool" is undefinedusb\USB\usb_pwr.h(54): ...