unicode - 为什么字符可以转换为字节
问题描述
我有一个与计算中的字符编码(ASCII 和 UTF-8)相关的问题,如果有人能帮助我,我将不胜感激。
我们知道,对于计算机而言,绝对一切都是字节序列,也就是说,我们人类所知道的文本和字符只是计算机解释的字节序列的图形表示。
我在几篇文章中读到,编码是将字符映射到二进制文件以存储在内存中的过程。但这没有意义,因为对于计算机而言,所有数据都只是字节,所以对于计算机而言,这与将字节映射到字节相同。
我想知道我所说的对你是否有意义?
解决方案
在内部,计算机必须以某种字节形式存储字符,但理想情况下这种存储是不透明的。“字符串”可以存储“字符”,但这些字符在内存中的编码方式取决于程序。
编码是获取“字符”并将其转换为特定字节表示的过程。
解码是获取特定字节表示并将其转换回程序的“字符”概念的过程。
作为一个具体的例子,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
'你好'
推荐阅读
- python - 当尝试使用线性回归 Pandas 进行估算时,会产生特定于我的案例的真值错误
- c# - webrequest, Le serverur distance a retourné une erreur : (400) 要求不正确
- python-3.x - 如何在 Pandas DataFrame 的不同列中扣除离散值
- docker - Jenkins Kubernetes 插件:如何从 Dockerfile 构建镜像并在镜像中运行步骤
- sql - 远程更新同一应用程序的多个网站和数据库
- java - 服务器以“错误:无效图像”响应包含 base64 图像的 java http post 请求
- sql - BigQuery 和标准 SQL:如何查找每天的出现次数
- google-cloud-firestore - Firebase 安全规则,确保只有一个“数组删除”,并且只对 userId
- c++14 - 该代码仅采用第一个测试用例的输入
- java - 在用户打开相机拍照时在屏幕中添加图片