编写存储 UTF-8 的自定义字符串类时在内部(以节省内存)而不是 UTF-16从头开始 在应用程序使用具有随机访问的类时,是否可以在某种程度上缓存字节偏移量和字符偏移量之间的关系以提高性能?
Perl 会做这种字符偏移到字节偏移关系的缓存吗? Python 字符串在内部是如何工作的?
Objective-C 和 Java 呢?他们在内部使用 UTF-8 吗?
编辑
找到了对内部使用 UTF-8 的 Perl 5 的引用:
“$flag = utf8::is_utf8(STRING)
(自 Perl 5.8.1 起)测试 STRING 是否在内部使用 UTF-8。功能上与 Encode::is_utf8() 相同。”
在页面上
http://perldoc.perl.org/utf8.html
编辑
在我想到的应用程序中,字符串在 XMPP 流中有 1-2K 的 XML 节。大约 1% 的消息将具有我预计高达 50%(按字符计数)的 Unicode 值 > 127(这是 XML)。在服务器中,消息在一个小的(字符量方面)字段子集上进行规则检查和有条件地路由。服务器是在农场中运行的 Wintel 盒子。在客户端中,数据来自 UI 工具包并被馈送到 UI 工具包中。
编辑
但该应用程序将不可避免地发展,并且也想进行一些随机访问。发生这种情况时性能损失是否可以最小化:我也很感兴趣是否存在更通用的类设计,例如管理大 UTF8 字符串的字符偏移 <-> 字节偏移关系的 b 树(或其他一些被发现有效的算法)一般情况。)
最佳答案
Perl 区分 Unicode 和非 Unicode 字符串。 Unicode 字符串在内部使用 UTF-8 实现。非 Unicode 并不一定意味着 7 位 ASCII,但它可以是任何可以在当前语言环境中表示为单个字节的字符。
关于java - 字符串类内部 - 如果使用 UTF-8,缓存字符偏移到字节关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942282/