Unicode字符串如何在Python的内存中表示?
例如,我可以将'abc'
其视为内存中的等效ASCII字节。整数可以被认为是2的恭维表示。但是u'\u2049'
,即使UTF-8
以'\xe2\x81\x89'
-3字节长的形式表示,如何可视化u'\u2049'
内存中的文字代码点?
是否有特定的方式存储在内存中?Python 2和Python 3是否以不同方式对待它?
对于好奇的人来说,很少有相关的问题:
发布于 2018-09-10 10:37:34
Python 2和Python 3.0-3.2使用UCS2 *或UCS4作为unicode字符,这意味着它将为每个字符使用2个字节或4个字节。选择哪一个是编译时选项。
\u2049
然后表示为\x49\x20
或者\x20\x49
或者\x49\x20\x00\x00
或者\x00\x00\x20\x49
取决于系统的本机字节顺序以及是否选择了UCS2或UCS4。unicode字符串中的ASCII字符仍然每个字符使用2或4个字节。
Python 3.3切换到一个新的内部表示,使用表示字符串中所有字符所需的最紧凑的形式。拾取1个字节,2个字节或4个字节。ASCII和Latin-1文本每个字符仅使用1个字节,其余BMP字符需要2个字节,然后使用4个字节。
有关这些表示的完整低位,请参阅PEP-393:灵活字符串表示。
*从技术上讲,UCS-2版本使用UTF-16,因为非BMP字符使用UTF-16代理来编码为4字节(每个2个UTF-16字符)。但是,Python文档仍然将其称为UCS2。
这确实会导致意外行为,例如len()
非BMP unicode字符串的长度超过包含的字符数。
https://stackoverflow.com/questions/-100006112
复制相似问题