在内部,计算机必须以某种字节形式存储字符,但理想情况下这种存储是不透明的。“字符串”可以存储“字符”,但这些字符在内存中的编码方式取决于程序。
编码是获取“字符”并将其转换为特定字节表示的过程。
解码是获取特定字节表示并将其转换回程序的“字符”概念的过程。
作为一个具体的例子,Python 语言有一个由 Unicode 代码点组成的“文本”类型,以及一个由 0-255 字节值组成的“字节”类型。您实际上不需要知道文本字符串是如何存储在内存中的,事实上它已经通过编译选项和 Python 版本多年来发生了变化(UTF-16、UTF-32,目前是一个变量编码,取决于最大值字符串中存在的代码点)。文本字符串可以编码为字节字符串并解码回文本字符串:
>>> s = '你好' # Two Chinese characters, How are the stored in memory? Does it matter?
>>> type(s)
>>> len(s)
2
>>> b = s.encode('utf8')
>>> type(b)
>>> len(b)
6
>>> print(b)
b'\xe4\xbd\xa0\xe5\xa5\xbd' # 6 bytes encoding the 2 characters in UTF-8
>>> b.decode('utf8') # decode from UTF-8 back to text
'你好'