如何将字符串存储为"Unicode 代码点序列"?



我正在尝试理解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

最新更新