我需要对一组字符串执行大小写折叠,并且必须事先确保它们在完成后不会超过给定的长度(硬编码所需的缓冲区大小)。问题是在应用大小写折叠后字符串长度(以代码点为单位)可能会发生变化。参见,例如,在 Python3 中:
>>> "süß".casefold()
'süss'
现在,一个字符串在执行大小写折叠后可能包含的最大代码点数可以很容易地计算出来:
>>> max(len(chr(s).casefold()) for s in range(0x10FFFF + 1))
3
但它在所有情况下都有效吗?我的意思是,由于Unicode的一些神秘属性,代码点的序列(它们出现的顺序)是否可能会影响字符串的最终长度?或者我可以假设最终的字符串总是最多比原始字符串长 3 倍吗?