3

我需要对一组字符串执行大小写折叠,并且必须事先确保它们在完成后不会超过给定的长度(硬编码所需的缓冲区大小)。问题是在应用大小写折叠后字符串长度(以代码点为单位)可能会发生变化。参见,例如,在 Python3 中:

>>> "süß".casefold()
'süss'

现在,一个字符串在执行大小写折叠后可能包含的最大代码点数可以很容易地计算出来:

>>> max(len(chr(s).casefold()) for s in range(0x10FFFF + 1))
3

但它在所有情况下都有效吗?我的意思是,由于Unicode的一些神秘属性,代码点的序列(它们出现的顺序)是否可能会影响字符串的最终长度?或者我可以假设最终的字符串总是最多比原始字符串长 3 倍吗?

4

1 回答 1

3

Unicode 标准将大小写折叠定义如下:

toCasefold(X):将X中的每个字符C映射到Case_Folding(C)。

因此,无论上下文如何,字符串中的每个字符都被大小写折叠,并且结果被连接起来。这意味着您的假设是正确的:保证大小写的字符串最多具有原始代码点数的三倍。

于 2014-05-20T16:59:45.607 回答