python - 字符串如何存储为 'sequence of Unicode code points' ?

标签 python

我正在尝试理解 python 3 中的字符串表示形式。我在网站上看到了各种解释,并且从 Mark Lutz 的《学习 python》一书中了解到,在 python 3 中,str 对象存储为 Unicode 代码点。引用这本书,“非 Unicode 代码序列是 8 位字节的序列,在可能的情况下用 ASCII 字符打印,而 Unicode 字符串是 Unicode 代码点的序列”。

我理解上面引用的第一部分,但我不太理解第二部分。如何将字符序列(例如当我在控制台中输入 S = 'spam' 时)存储为“Unicode 代码点”?

我相信代码点只是与字符相对应的数字,但是从这个数字到二进制表示的实际编码取决于您选择使用的系统,例如 utf-8 或 utf-32 。如果这是真的(如果不是,请纠正我!),那么为了将我的变量 S 保存到内存中,计算机必须在某个时刻将“垃圾邮件”转换为某种字节序列。所以我从一些字符转为二进制,这是一种编码形式?我看过另一篇文章,其中解释了 python 不进行自己的编码。

我不明白如何在不进行某种形式的编码的情况下将我的变量 S 保存到内存中(而不是像书中解释的那样将数据存储为代码点)?

提前致谢。

最佳答案

您的引用没有提及 Unicode 字符串在内存中的表示形式。它说“Unicode 字符串 Unicode 代码点序列”,而不是“存储为”。

这句话是对 Unicode 字符串含义的描述,而不是它在内存中的表示。 Python 有很多内部表示 Unicode 字符串的方法,包括 ASCII、UTF-8 和 UTF-32。它甚至可以将多个表示存储在同一个字符串对象中;特别是PyUnicode_AsUTF8AndSize将导致字符串存储辅助 UTF-8 表示形式,除非该字符串是 ASCII(已经是有效的 UTF-8),并且字符串还可能存储 wchar_t 表示形式。

所有内存表示都是实现细节,可能会发生变化。如果你想查看内部表示,请查看 Include/unicodeobject.h

关于python - 字符串如何存储为 'sequence of Unicode code points' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52897906/

相关文章:

python - Sentry POST 数据不会传播到 UI

python - 有没有办法在 python 中使用 TF-IDF 找到句子的权重

python - 如何批量运行python脚本?

python - Python - PySide 和 Qt 库之间的链接类型?

python - R 中 KerasR LSTM 的数组转换

python - python中的数值积分与符号积分

python - 在 python 的 dicom 包中使用 read_file 时的维度轴

python - 使用 pandas/matplotlib/python,我无法将 csv 文件可视化为集群

python - 在 Python 字典理解中将多个值添加到单个键

python - 如何使用 SWIG 从 C++ 无序映射生成 Python 字典?