如何将字符串存储为“Unicode码位序列”?

2024-04-24 19:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解python3中的字符串表示。我在网站上看到了各种解释,从marklutz的《学习python》一书中可以看出,在python3中,str对象存储为Unicode代码点。引用这本书,“非Unicode代码序列是8位字节的序列,尽可能使用ASCII字符打印,Unicode字符串是Unicode代码点的序列”。你知道吗

我理解上面引述的第一部分,但我不太理解第二部分。如何将字符序列(例如在控制台中键入S='spam'时)存储为'Unicode码位'?你知道吗

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

我不明白我的变量S怎么能不经过某种形式的编码就保存到内存中(不仅仅是像书中解释的那样把数据存储为代码点)?你知道吗

提前谢谢。你知道吗


Tags: 内存字符串代码编码字节网站unicode二进制
1条回答
网友
1楼 · 发布于 2024-04-24 19:24:39

你的引用没有提到任何关于Unicode字符串在内存中的表示。它说“Unicode字符串是Unicode码点的序列”,而不是“存储为”。你知道吗

此引号是对Unicode字符串含义的描述,而不是其内存表示形式。Python有许多内部表示Unicode字符串的方法,包括ASCII、UTF-8和UTF-32。它甚至可以在同一个string对象中存储多个表示形式;特别是,PyUnicode_AsUTF8AndSize将导致字符串存储辅助UTF-8表示形式,除非该字符串是ASCII(它已经是有效的UTF-8),并且字符串还可以存储wchar\t表示形式。你知道吗

所有内存表示都是实现细节,可能会发生更改。如果您想查看内部表示,请查看^{}

相关问题 更多 >