首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >unicode如何在Python内部表示?

unicode如何在Python内部表示?
EN

Stack Overflow用户
提问于 2018-09-10 01:34:53
回答 1查看 0关注 0票数 0

Unicode字符串如何在Python的内存中表示?

例如,我可以将'abc'其视为内存中的等效ASCII字节。整数可以被认为是2的恭维表示。但是u'\u2049',即使UTF-8'\xe2\x81\x89'-3字节长的形式表示,如何可视化u'\u2049'内存中的文字代码点?

是否有特定的方式存储在内存中?Python 2和Python 3是否以不同方式对待它?

对于好奇的人来说,很少有相关的问题:

1)这些字符串如何在Python解释器内部表示?我不明白

2)Python 3.x中字符串的内部表示是什么

EN

回答 1

Stack Overflow用户

发布于 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字符串的长度超过包含的字符数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档