先说说什么是编码。

编码(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. Critical: Update Your Windows Secure Channel (cve-2014-6321,MS14-066)

    前言:风雨欲来山满楼,下半年开始各种凶猛的漏洞层出不穷,天下已经不太平,互联网已经进入一个新的台阶 0x01 cve-2014-6321 11月的补丁月,微软请windows的用户吃了顿大餐,发布了1 ...

  2. CALayer的m34 - 三维透视效果

    CATransform3D transform = CATransform3DIdentity; // 修改transform的m34达到透视效果 // - 1.0 / (500 ~ 1000 效果最 ...

  3. iOS网络3—UIWebView与WKWebView使用详解

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  4. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  5. 遇到的Exception/error及解决办法记录汇总

    一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常 ...

  6. hdfs以及hbase动态增加和删除节点

    一个知乎上的问题:Hbase的Region server和hadoop的datanode是否可以部署在一台服务器上?如果是的话,二者是否是一对一的关系?部署在同一台服务器上,可以减少数据跨网络传输的流 ...

  7. tcpdump、nc网络工具使用

    tcpdump: 网络嗅探器 nc: nmap: 端口扫描 混杂模式(promisc) C设置为监控,当A和B通信,C是无法探测到数据的,除非有交换机的权限,将全网端口的数据通信都发送副本到C的端口上 ...

  8. Linux环境搭建-在虚拟机中安装Centos7.0

    最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然 ...

  9. Android的Handler机制

    Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...

  10. VS 生成事件

    转载自: http://hi.baidu.com/gisince/item/7f0439ee610c94255a2d64b4 今天写了生成事件的处理,如下: 从网上Down了一个例子,运行时提示错误 ...