1、是什么原因导致产生了字符编码呢?
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
ASCII表
![](https://img.haomeiwen.com/i1189654/70b8e58c2925aea4.png)
扩展:字节
在计算机内部,所有的信息最终都表示成一个二进制的字符串,每一个二进制位(bit)有两个状态,因此八个二进制位2^8就可以组合成256种不同的状态,八个二进制位,我们称之为一个字节(byte)。表示范围是 00000000 ~ 11111111
1960年代,美国规定了制定了一套字符编码,对英文字符(含符号)与二进制位之间的关系,做了统一规定。 这被称为ASCII,一直沿用至今。
2、为什么出现了Unicode编码呀?
世界上存在多种语言,比如英语使用128个符号编码就可以了,但是比如咱们的汉字就有约10W个,那么就无法像英语一样使用ASCII编码(使用一串二进制位代表一个汉字)。
世界上有多种编码方式,如果能有一种编码,能将所有的符号都纳入其中,每个符号都给予一个独一无二的编码,那么乱码的问题就可以解决了。由此产生了Unicode 编码。它是一个很大的集合,现有100多万个符号。
- 缺点:
1.如何区分ASCII与Unicode编码呢?
2.英文字母仅仅用一个字节就可以表示,如果Unicode 规定用三个或者四个字节表示那么英文字母的前两三个字符必然是0,会造成极大的空间浪费。
3、有了Unicode,为什么还需要UTF-8呢?
随着互联网的普及,强烈要求出现一种统一的编码,UTF-8就是互联网上使用最广的一种Unicode的实现方式。
UTF-8的特点:它是一种变长的编码方式,可以使用1~4个字节表示一个符号,根据不同的符号来变化字节长度
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。(2^7 = 128个字符)
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
下面,以汉字"严"为例,演示如何实现UTF-8编码。
已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。
Q4: 【实际使用】为什么Python代码中要加字符编码声明呢?
- python2 的默认编码方式是 ascii, python3 的默认编码是 utf-8
-
python 的诞生(1991年,哈哈跟我一般大~)比Unicode的标准发布(1994年)还要早,所有早期的python 仅支持ascii编码。
image.png
所以说如果你使用的是python3 版本,那么可去掉字符编码的声明
如果你使用的是python2 版本,不好意思,请加上字符编码声明。
![](https://img.haomeiwen.com/i1189654/913ab17f2fec0f64.png)
![](https://img.haomeiwen.com/i1189654/20fb84dc5a275e6e.png)
网友评论