首页 > 解决方案 > 为什么字符可以转换为字节

问题描述

我有一个与计算中的字符编码(ASCII 和 UTF-8)相关的问题,如果有人能帮助我,我将不胜感激。

我们知道,对于计算机而言,绝对一切都是字节序列,也就是说,我们人类所知道的文本和字符只是计算机解释的字节序列的图形表示。

我在几篇文章中读到,编码是将字符映射到二进制文件以存储在内存中的过程。但这没有意义,因为对于计算机而言,所有数据都只是字节,所以对于计算机而言,这与将字节映射到字节相同。

我想知道我所说的对你是否有意义?

标签: unicodeencodingutf-8character

解决方案


在内部,计算机必须以某种字节形式存储字符,但理想情况下这种存储是不透明的。“字符串”可以存储“字符”,但这些字符在内存中的编码方式取决于程序。

编码是获取“字符”并将其转换为特定字节表示的过程。

解码是获取特定字节表示并将其转换回程序的“字符”概念的过程。

作为一个具体的例子,Python 语言有一个由 Unicode 代码点组成的“文本”类型,以及一个由 0-255 字节值组成的“字节”类型。您实际上不需要知道文本字符串是如何存储在内存中的,事实上它已经通过编译选项和 Python 版本多年来发生了变化(UTF-16、UTF-32,目前是一个变量编码,取决于最大值字符串中存在的代码点)。文本字符串可以编码为字节字符串并解码回文本字符串:

>>> s = '你好'  # Two Chinese characters, How are the stored in memory? Does it matter?
>>> type(s)
<class 'str'>
>>> len(s)
2
>>> b = s.encode('utf8')
>>> type(b)
<class 'bytes'>
>>> 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
'你好'

推荐阅读