Python基础学习教程:常用的字符编码,编码解码之间的转换

我们在写程序的时候经常遇到转码的问题,或者乱码的问题。这本文章就把经常遇到的ASCIIUnicode UTF-8给大家梳理一下。

一、ASCII

ASCII(美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,对英语字符与二进制位之间的关系,它是现今最通用的单字节编码系统。

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 9、标点符号, 以及在美式英语中使用的特殊控制字符。

ASCII 编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。

. Unicode

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。 

Unicode 当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母AinU+0041表示英语的大写字母AU+4E25表示汉字严。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

Unicode的问题:

Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode

2Unicode在很长一段时间内无法推广,直到互联网的出现。

三、UTF-8

UNICODEASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF 

UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8Unicode的实现方式之一。

六、decodeencode的区别

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

猜你喜欢

转载自blog.csdn.net/programmer_feng/article/details/80243455
今日推荐