python基础12 字符编码

主要内容

  1. 字符编码

字符编码

基本概念

  • 字符(Character) 是各种文字和符号的总称。
  • 字符集(Character set) 是一个系统支持的所有抽象字符的集合。
  • 字符编码(Character encoding) 是把字符集中的字符,编码为特定的二进制数,以便在计算机中存储。每个字符集中的字符都对应一个唯一的二进制编码。

字符集和字符编码一般都是成对出现的,如ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码。Unicode比较特殊,有多种字符编码(UTF-8,UTF-16等)

常见字符集及编码

1. ASCII字符集&编码

ASCII(American Standard Code for Information Interchange, 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。

  • 字符集

    ASCII一共定义了128个字符,包括33个控制字符,和95个可显示字符。大部分的控制字符已经被废弃。

  • 字符编码格式

    ASCII码为单字节,用7位二进制数表示,由于计算机1个字节是8位二进制数,所以最高位为0,即00000000-01111111或0x00-0x7F。

  • Unicode,GBXXX,UTF-8等字符编码都兼容ASCII编码。
  • ASCII的缺点

    是只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语。扩展出了EASCII,解决了部份西欧语言的问题。

  • EASCII(Extended ASCII,延伸美国标准信息交换码)

    是将ASCII码由7位扩充为8位而成。EASCII的内码是由0到255共有256个字符组成。EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

2. GB2312字符集&编码

GB 2312 或 GB 2312–80 是中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB 2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

  • 字符集

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁体字,GB 2312不能处理,因此后来GBK及GB 18030汉字字符集相继出现以解决这些问题。

  • 分区

    GB 2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

    01–09区为特殊符号。 16–55区为一级汉字,按拼音排序。 56–87区为二级汉字,按部首/笔画排序。 举例来说,“啊”字是GB 2312之中的第一个汉字,它的区位码就是1601。 10–15区及88–94区则未有编码。

  • 字符编码

    在使用GB 2312的程序通常采用EUC储存方法,以便兼容于ASCII。 每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。

3. GBK字符集&编码

汉字内码扩展规范,称GBK,全名为《汉字内码扩展规范(GBK)》1.0版,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司和电子工业部科技与质量监督司1995年12月15日联合以《技术标函[1995]229号》文件的形式公布。

GBK的K为汉语拼音Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Extension Specification。

  • 字符集

    GB 2312-80只收录6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。GBK对GB 2312-80进行扩展, 总计拥有 23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。

  • 字符编码 GBK 亦采用双字节表示,总体编码范围为8140-FEFE。 GBK向下完全兼容GB2312-80编码。支持GB2312-80编码不支持的部分中文姓,中文繁体,日文假名,还包括希腊字母以及俄语字母等字母。不过这种编码不支持韩国字,也是其在实际使用中与unicode编码相比欠缺的部分。

4. GB 18030字符集&编码

全称:国家标准GB 18030-2005《信息技术 中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB 18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。与GB 2312-1980完全兼容,与GBK基本兼容;支持GB 13000(93版等同于Unicode 1.1;2010版等同于Unicode 4.0)及Unicode的全部统一汉字,共收录汉字70,244个。 本规格的初版是由中华人民共和国信息产业部电子工业标准化研究所起草,由国家质量技术监督局于2000年3月17日发布。现行版本为国家质量监督检验总局和中国国家标准化管理委员会于2005年11月8日发布,2006年5月1日实施。

此标准内的单字节编码部分、双字节编码部分,和四字节编码部分收录的中日韩统一表意文字扩展A区汉字,为强制性标准。其他部分则属于规模性标准。在中华人民共和国境内所有软件产品,都需要支持这个同时包含单字节、双字节和四字节编码的规格。

GB 18030主要有以下特点:

  • 和UTF-8一样都采用多字节编码,每个字可以由1个、2个或4个字节组成。
  • 编码空间庞大,最多可定义161万个字元。
  • 支持中国国内少数民族的文字,不需要动用造字区。
  • 汉字收录范围包含繁体汉字以及日韩汉字。

5.Unicode字符集&编码

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

  • 编码方式 用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示2的16次方(即65536)个字符。基本满足各种语言的使用。实际上当前版本的统一码并未完全使用这16位编码,而是保留了大量空间以作为特殊使用或将来扩展。 unicode原编码占用两个字节,在使用ASCII字符时,高位字节的8位始终为0,这会造成空间的浪费。为了避免这种浪费,Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。 UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

可以这样理解:Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。 UTF-8是一种很别扭的编码,具体表现在他是变长的,并且兼容ASCII

python 字符编码

  • 在python2默认编码是ASCII, python3里默认是unicode
  • unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
  • 在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

python 编码转换

比如一款韩国软件,到中国以后显示乱码,那就得需要通过转码把他们编码集,转换为Unicode(utf-8)编码集。这样他们就可以正常显示韩文了!(这里只是转编码集并不是翻译成中文不要弄混了~~!) 编码转换过程如下图:

GBK需要转换为UTF-8流程:

  1. GBK 【decode】解码为Unicode。
  2. Unicode【encode】编码为utf-8。

UTF-8需要转换为GBK流程:

  1. UTF-8【decode】解码为Unicode。
  2. Unicode【encode】编码为GBK。

参考页面

http://www.imooc.com/code/3269

http://www.cnblogs.com/alex3714/articles/5717620.html

http://www.cnblogs.com/chiguozi/p/5860364.html

http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

http://www.cnblogs.com/luotianshuai/articles/5735051.html

时间: 2024-11-10 00:52:23

python基础12 字符编码的相关文章

Python基础day-5[字符编码,文件处理,函数]

字符编码: 为什么要有字符编码?字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 字符编码其实就是在完成一件,字符====>数字的翻译过程. ASCII: 最早计算机是美国发明的,所以最早诞生的ASCII码也是基于英文考虑的.ASCII码:一个Bytes代表一个字符,1Bytes=bit.最早的ASCII只用到后七位. 127个数字,已经完全能代表键盘了,后来又把127号之后的空位来表示新的字母.符号,还加入

第五篇:python基础之字符编码

1. 计算机基础知识(三幅图) 2. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的,断电后数据丢失 因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到了硬盘上. 在这一点上,我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已.  3. python解释器执行py文件的原理 ,例如python test.py 1.第一阶段,python解

python 基础之字符编码和文件处理

一.字符编码 (1)计算机基础知识 (2)python 解释器执行py文件的原理 <1>python 解释器启动 <2>python解释器相当于一个文本编辑器,打开txt.py文件,从硬盘把txt.py文件内容读到内存中 <3>python解释器解释刚刚加载到内存中的txt.py的代码(在该阶段及执行时,才会识别python的语法,执行文件内存代码,执行到name="egon",会开辟内存空间存放字符串"egon")  (3)py

python基础之字符编码及文件操作

一.了解字符编码前的知识储备 1.计算机运行程序或读取文件的原理 为了使计算机运行速度不被I/O操作速度拖慢,CPU并不会直接从硬盘中读取数据,因为硬盘的读写速度和CPU相差太大,所以CPU都是从速度相对较快的内存中读取数据的.而程序文件和文本文件为了永久保存又都保存在硬盘中,因此计算机运行程序或读取文件的过程一般是这样的,先由操作系统控制硬盘将程序文件或文本文件读取到内存中,然后CPU再从内存中读取数据运行或者输出到终端打印到屏幕上. 2.文本编辑器读取文件原理 2.1文本编辑器程序文件读取到

python基础3 字符编码

本节主要内容: 基本概念 ASCII及其扩展 中文字符编码 unicode 注释 参考网页 基本概念 计算机中储存的信息都是二进制的0/1串,当我们要在计算机中存储诸如英文.中文.标点符号等字符时,需要先把字符转化成二进制的0/1串之后再保存到计算机中:而当我们要读取保存在计算机中的信息时,需要通过一定的方法把里面的二进制0/1串转化成为原先的字符,然后再通过显示器等渠道进行显示. 这里涉及到字符编码的两个基本概念: 字符集(Character Set):指系统支持的所有字符的集合.字符包括涉及

python基础之字符编码(一)

一.什么是字符编码 计算机要想工作必须通电,也就是说'电'驱使计算机干活,而'电'的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而编程的结果说白了只是一堆字符,也就是说我们编程最终要实现的是:一堆字符驱动计算机干活 所以必须经过一个过程: 字符串--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码 二.字符编码分类 计算机由美国人发明,最早的字符编码为AS

Python 基础之字符编码

字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,最早只有1

1.2 Python基础知识 - 字符编码

计算机中的数据是以二进制方式进行存储的,即只有"0"和"1",二进制是属于数据类型的数据,它只可以和其他进制的数据类型进行转换,但是不能存储其他字符,例如:字母,特殊字符等,所以人们创建了一张表,这张表是一张10进制的数字和字符的对应表格,这个表格就叫做ASCII(American Standard Code for Information Interchange 美国信息交换标准代码)表,主要用于显示现代英语和其他西欧语言,如下:      现在人们可以在计算机中

【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系

字符编码 由于计算机只识别0和1,为了使计算机能够支持文字和字母等符号,方便实用操作计算机 于是字符编码应运而生,旨在解决符号和人类语言与计算机0和1建立起一种对应关系 据说不理解字符编码可能是程序员一辈子的遗憾,拿出来单独总结一下 发展史: ASCII-->Unicode-->UTF-8 ASCII是最早期应用在美国方面的,建立了A-z和一批特殊符号,一共128种字符与二进制之间的对应关系 比如:小写字母w 十进制135 转换为二进制 10000111 空格 0 0 如果表示[空格][空格]