Nis*_*ant 15 python string unicode python-internals
Unicode字符串在Python的内存中如何表示?
例如,我可以将'abc'其视为内存中的等效ASCII字节.整数可以被认为是2的恭维表示.但是u'\u2049',即使UTF-8以'\xe2\x81\x89'-3字节长的形式表示,如何可视化u'\u2049'内存中的文字代码点?
是否有特定的方式存储在内存中?Python 2和Python 3是否以不同方式对待它?
对于任何好奇的人来说,很少有相关问题
Mar*_*ers 21
我假设您想了解CPython,标准实现.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字符串的长度超过包含的字符数.
| 归档时间: |
|
| 查看次数: |
4280 次 |
| 最近记录: |