教小白精通编程系列之“Python程序设计基础与实践”.未经作者同意,不得转载,违者将追究法律责任!
欢迎关注
微博:教小白精编程
1.4 字符(char)的表示
计算机中所有的数据、指令都是以0,1串表示的,前面我们看到过的数字(Number)在计算机中是如何用二进制位表示的。同样的,各种字符比如大小写的英文字母、数字(0,1,2…9)、一些特殊字符如#
、/
、换行符、制表符等键盘上可以看到的字符也都是以一串二进制表示的。例如整数值为42的二进制串表示某个字符*
。不同的二进制串(整数)表示不同的字符完全取决于你怎么解释它们。
ASCII码
1960年代,American Standard Code for Information Interchange (ASCII)约定用7位二进制表示128个不同的字符。
原始的7位ASCII对于美国或英国人没有任何问题,但是对于法国、德国等语言的字符就不够用了,于是提出了扩展的用8位二进制表示字符的扩展ASCII字符编码。
如果你是中国、日本、朝鲜、阿拉伯人,8位ASCII编码就不行了,这些国家语言的字符(比如汉字)总共有将近88,000个,为了克服原始的ASCII的缺陷,1990年人们提出了“统一字符编码”Universal Character Set (UCS)。UCS是standard ISO 10646标准,编码长度为32位。
UCS 和 Unicode
UCS定义了字符和称之为编码点(Code Point) 的整数值的映射关系。编码点和编码(Code) 并不是一回事,编码点是一个整数值,而编码是用一系列字节(byte)表示一个编码点的方式。 不超过256的编码值用一个字节就可以表示,如果用4个字节而不是1个字节存储这些值就浪费了。因此,编码是如果有效地存储表示编码值的方式.
Unicode是一个标准,不仅定义了一个字符集及其编码点(其中字符的编码点等同于UCS的对应字符的编码点)。Unicode还定义了多种表示编码点的编码方式,并且包含额外的机制处理“右到左”的语言如阿拉伯语(Arabic)。编码点的范围不仅可以容纳所有语言的所有字符,还可以表示不同的图形符号如数学符号、甚至表情符号。大多数语言字符都能用16位编码(Code)表示。
因为Unicode提供了多种编码方法而容易造成理解上的困惑,最广泛使用的Unicode编码方式包括: UTF-8,UTF-16,UTF-32。其中每个编码方式都可以表示Unicode字符集中的所有字符。
-
UTF-8表示一个字符采用的是变长的字节序列(即用1到4个字节表示一个字符),其中ASCII字符的编码使用一个字节表示和对应的ASCII编码是一样的。 大多数网页的文本都采用的是UTF-8编码方式
-
UTF-16用1或2个16位(16-bit)值在表示一个字符。UTF-16包含了TUF-8。
-
UTF-32最简单,用一个32位(32-bit)值表示所有的字符。
例如字符A和汉字的’中’的UniCode编码点及UTF-8编码如下
字符 | ASCII | UniCode编码点 | UTF-8编码 |
---|---|---|---|
A | 01000001 | 00000000 01000001 | 01000001 |
中 | 无 | 01001110 00101101 | 11100100 10111000 10101101 |
您的打赏是对我最大的鼓励!