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

字符编码
由于计算机只识别0和1,为了使计算机能够支持文字和字母等符号,方便实用操作计算机
于是字符编码应运而生,旨在解决符号和人类语言与计算机0和1建立起一种对应关系
据说不理解字符编码可能是程序员一辈子的遗憾,拿出来单独总结一下

发展史:
ASCII-->Unicode-->UTF-8
ASCII是最早期应用在美国方面的,建立了A-z和一批特殊符号,一共128种字符与二进制之间的对应关系
比如:小写字母w 十进制135 转换为二进制 10000111
空格 0 0
如果表示[空格][空格]w 二进制就是 0010000111 #前面的两个0代表两个空格
就有个问题就是二进制本来就一串繁琐空格和w怎么话分界线来界定每个字符的界限呢,以致后来就统一了一下所有字符都占8位,每次以8位界限读取
如果表示[空格][空格]w 二进制就是 00000000 00000000 10000111 ##这里每1或0占1bit(比特)
于是乎就有了今天的ASCII码每个字符占1bytes(字节)
换算关系:
bit 位,计算机中最小的表示单位,每个字符转二进制后的0和1
8bit = 1bytes(B) 字节,最小的存储单位,1bytes缩写为1B
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
...
优点:建立了对应关系
缺点:并不适用其他国家语言,其他语言解析会出现乱码,比如中文,韩文等等...

GBK 为了同时满足中文和英文(ASCII),中国人定制了GBK,也就是说这个时候中文和英文使用GBK没问题,如果写日文其他语言就会产生乱码
GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符
其他国家满足自己,各个国家纷纷定制了自己的编码
日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里

Unicode 旨在解决其他国家语言共存的问题而应运而生,俗称万国编码,仅建立在内存中
由于ASCII 用的是 8位也就是说 最多支持 11111111 转换成十进制255个编码
中文恐怕就远远不够了,中文有几万个,后来对于中文就在原来1字节(11111111)基础又加了1个字节

ASCII 英文 11111111 最高支持255个字符 占用1字节
Unicode 支持中文 11111111 11111111 100W+ 占用2-4字节
Unicode为了同时兼容8位的ASCII,在原来ASCII的8位基础上统一添加00000000实现了 2个bytes
之所以说unicode是定长是因为所有的字符都是占用2bytes
这就是unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,
但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符编码表

UTF-8 很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)
于是产生了UTF-8(可变长,全称Unicode Transformation Format),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他
生僻字用更多的Bytes去存。于是现在大家也都在推行UTF-8的原因之一

整个发展历程:
ASCII --> GBK --> Unicode --> UTF-8
使用过程:
基于目前的现状,内存中的编码固定就是unicode,我们唯一可变的就是硬盘的上对应的字符编码。
此时你可能会觉得,那如果我们以后开发软时统一都用unicode编码,那么不就都统一了吗,关于统一这一点你的思路是没错的,但我们不可会使用
unicode编码来编写程序的文件,因为在通篇都是英文的情况下,耗费的空间几乎会多出一倍,这样在软件读入内存或写入磁盘时,都会徒增IO次数,
从而降低程序的执行效率。因而我们以后在编写程序的文件时应该统一使用一个更为精准的字符编码utf-8(用1Bytes存英文,3Bytes存中文),
再次强调,内存中的编码固定使用unicode。
1、在存入磁盘时,需要将unicode转成一种更为精准的格式,utf-8:全称Unicode Transformation Format,将数据量控制到最精简
2、在读入内存时,需要将utf-8转成unicode
所以我们需要明确:内存中用unicode是为了兼容万国软件,即便是硬盘中有各国编码编写的软件,unicode也有相对应的映射关系,但在现在的开
发中,程序员普遍使用utf-8编码了,估计在将来的某一天等所有老的软件都淘汰掉了情况下,就可以变成:内存utf-8<->硬盘utf-8的形式了。

参考:http://www.cnblogs.com/linhaifeng/articles/5950339.html
更多图文并茂请点超链接

原文地址:http://blog.51cto.com/swiki/2129947

时间: 2024-08-27 18:47:34

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

字符编码 ASCII,Unicode 和 UTF-8 概念扫盲

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚. 下面就是我的笔记,主要用来整理自己的思路.但是,我尽量试图写得通俗易懂,希望能对其他朋友有用.毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2

字符编码 ASCII,Unicode 和 UTF-8扫盲

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚. 下面就是我的笔记,主要用来整理自己的思路.但是,我尽量试图写得通俗易懂,希望能对其他朋友有用.毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2

字符编码ascii、unicode、utf-&#173;‐8、gbk 的关系

ASIIC码: 计算机是美国人发明和最早使用的,他们为了解决计算机处理字符串的问题,就将数字字母和一些常用的符号做成了一套编码,这个编码就是ASIIC码.ASIIC码包括数字大小写字母和常用符号,一共128个,1字节(byte)=8bit,8bit能表示的最大数是256,所以ASIIC编码中一个字符的大小就是1个字节 Unicode编码: 计算机进入中国后,ASIIC完全不够用,于是我们就制定了自己的GB2312编码,把汉字编码了进去.类似的在各国都有相同的情况,各国都开始制定自己的一套编码,计

字符编码ascii、unicode、utf-8、gbk 的关系

ASCII码: 计算机是美国人发明和最早使用的,他们为了解决计算机处理字符串的问题,就将数字字母和一些常用的符号做成了一套编码,这个编码就是ASCII码.ASC码II包括数字大小写字母和常用符号,一共128个,1字节(Byte)=8bit,8bit能表示的最大数是256,所以ASIIC编码中一个字符的大小就是1Byte Unicode编码: 计算机进入中国后,ASCII完全不够用,于是我们就制定了自己的GB2312编码,把汉字编码了进去.类似的在各国都有相同的情况,各国都开始制定自己的一套编码,

Python基础(字符编码与文件处理)

一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失.因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上. 3.Python解释器执行py文件的与原理,例如python test.py 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器. 第二阶段:python解释器相当

java中的常用字符编码ASCII、Unicode和UTF-8

首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111. 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今. ASCI

Python自动化开发课堂笔记【Day03】 - Python基础(字符编码使用,文件处理,函数)

字符编码使用 1. 文本编辑器如何存取文件 文本编辑器相当一个运行在内存中的进程,所以文件内容在编辑未存储时都是在内存中的,尚未存储在硬盘之中,在没有保存之前,所编辑的任何文本都只是一堆字符,没有任何逻辑上的意义,当存储文件的时候需要以一定的编码格式存储于硬盘之中,当进行文件读取的时候也需要以同样的编码格式进行读取到内存之中进行操作,如果存储文件的编码和读取文件的编码不一致则会引起读取过程中的乱码导致文件操作失败. P.S. --> Python解释器执行py文件的原理. Step1. Pyth

Python基础-字符编码

字符编码 Python 解释器在加载.py文件中的代码,会对内容进行编码(默认asciII) ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言,其最多只能用8位来表示(一个字节),即:2^8=256-1,所以,ASCII码最多只能表示255个符号. ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符

字符编码ASCII,Unicode和UTF-8

http://blog.csdn.net/pipisorry/article/details/42387045 ASCII码 ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001).这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0. 非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的.比如,在法语中,字母

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将