Unicode, UTF-8 and ASCII 编码问题

Posted frodo-x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unicode, UTF-8 and ASCII 编码问题相关的知识,希望对你有一定的参考价值。

编码问题,如何把语言及生活中的符号编码成计算机中的二进制表示出来。其中涉及到码表(code point)和编码方式。

码表就是字符与序号对应的表。例如Unicode和ASCII码就是码表。

编码方式就是怎么把序号编码成二进制的方式。UTF-8就是编码方式。

从码表转换到字节,就是编码(encoding);从字节转换到码表就是解码(decoding)。编码和解码中的规则就是编码方式规定的。在解码的过程中,必须指定编码方式,如果指定的编码方式和原来的编码方式不同,就会出现各种乱码。

Python编码解码示例(来自《Fluent Python》):

>>> s = 'café'
>>> len(s) # 字符串'café'有4个Unicode字符
4
>>> b = s.encode('utf8') # 用UTF-8编码成字节
>>> b
b'caf\xc3\xa9' #
>>> len(b) # é的对应码表在UTF-8中被编码成两个字节
5
>>> b.decode('utf8') # 再用UTF-8解码成字符串
'café'

Unicode实际上是一整套方案,其中包含一个码表,截止2019年5月,已经有137,994字符,包含了150多个现代、古代的字符以及emoji。Unicode还定义了UTF-8、UTF-16、UTF-32等编码方式。但一般提到Unicode都是指其中的码表。
Reference:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Unicode wiki

Fluent Python

以上是关于Unicode, UTF-8 and ASCII 编码问题的主要内容,如果未能解决你的问题,请参考以下文章

字符编码笔记:ASCII,Unicode和UTF-8

字符编码简介:ASCII,Unicode,UTF-8,GB2312及Unicode和UTF-8如何转化

字符编码笔记:ASCII,Unicode和UTF-8

字符编码笔记:ASCII,Unicode 和 UTF-8

字符编码笔记:ASCII,Unicode和UTF-8

转字符编码笔记:ASCII,Unicode和UTF-8