|
|
1
2
Perl区分Unicode和非Unicode字符串。Unicode字符串在内部使用UTF-8实现。非Unicode并不一定意味着7位的ASCII,但是,它可以是任何可以在当前区域设置中表示为单字节的字符。 |
|
2
1
我认为答案是:总的来说,尝试这样做是不值得的。在你的具体情况下,也许。 如果您的大多数字符是纯ASCII字符,并且很少有UTF序列,那么用偏移量构建某种稀疏的数据结构可能是值得的。 在一般情况下,每个字符都可能是非ASCII字符,您可能有许多偏移量要存储。实际上,最常见的情况是创建一个与Unicode字符字符串长度完全相同的字节字符串,并让每个字节值作为下一个字符的偏移量。但这意味着每个字符只需要一个完整的字节,因此每个Unicode字符只需要节省一个字节;这可能不值得做。这意味着索引到字符串现在是一个O(N)操作,因为您运行这些偏移量并求和以找到实际的索引。 如果您确实想尝试稀疏数据结构,我建议使用一组成对的值,第一个值是字符Unicode字符串中的索引,第二个值是该字符实际出现的字节序列中的索引。然后,在每个utf8转义序列之后,您将添加两个值以查找字符串中的下一个字符。最后,当为unicode字符指定索引时,代码可以对此数组进行二进制搜索,以查找稀疏数组中低于请求索引的最高索引,然后使用该索引查找表示所需字符开头的实际字节。 如果需要保存内存,可以考虑使用数据压缩库。将unicode字符串作为完整的unicode压缩,然后将其索引为字符串,首先解压缩该字符串。这真的会节省内存,而且要使代码正确地工作是很容易和快速的;但是它可能会增加太多的CPU开销,这是合理的。 |
|
|
3
1
Java的字符串是UTF16内部的:
|
|
|
George Kim · 如何在iOS中模拟特定坐标空间中的触摸? 2 年前 |
|
|
BENG · 协调C++和Objective-C中结构的填充 2 年前 |
|
|
Community wiki · iPhone上ivar的继承问题 2 年前 |
|
|
Community wiki · 在OpenGL中显示YUV 2 年前 |
|
|
YosiFZ · pod更新依赖关系pod 2 年前 |
|
|
Community wiki · 查找iOS日历 3 年前 |