可以降低UTF-8字符串使其增长吗?

时间:2018-01-20 00:18:57

标签: string encoding utf-8 uppercase lowercase

我正在帮助某人编写一些代码,以不区分大小写的方式比较UTF-8字符串。他们使用的方案是将字符串大写,然后进行比较。输入字符串都可以适合255字节的数组。类似地,输出字符串必须符合255字节数组。

我不是UTF-8或Unicode专家,但我认为这个方案对所有字符串都不起作用。我的理解是,无论是下壳还是上壳,UTF-8字符串都会导致输出字符串更长(字节数组),因此更改案例可能不是解决此问题的最佳方法。我试图通过提供一些不适合这种设计的字符串来证明这种困难。

例如,将字符U + 0587的字符串重复100次。 U + 0587采用UTF-8中的两个字节,因此字符串的字节数组的总长度为200字节(暂时忽略尾随的空值)。但是,如果该字符串是大写的,则它变为U + 0535 U + 0552,并且每个字符串占用两个字节,总共4个字节。 200字节数组现在是400字节,并且不能存储在可用的有限空间中。

所以这就是我的问题:我给出了一个小写字符的例子,当大写时需要更多空间来存储。是否有任何大写字符的示例在小写时需要更多空间来存储?在这种情况下,语言环境总是en_US.UTF-8。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是。我的环境中的例子:

U+023A Ⱥ    U+023E Ⱦ        

有几个相关因素可能导致变异。你已经指出了一个:

  1. 您指定的区域设置将影响该区域设置所关注的字符大小写。
  2. 您的库使用的Unicode公共区域设置数据存储库的版本。
  3. 您的图书馆使用的Unicode字符数据库的版本。
  4. 这些不是固定目标,因为我们可以预期会有未来的版本,并且会有用户使用它们。

    归根结底,这取决于你的环境和实际目的。