Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行unicode大小写折叠后字符串的最大长度_Unicode_Normalization_Unicode Normalization_Case Folding - Fatal编程技术网

执行unicode大小写折叠后字符串的最大长度

执行unicode大小写折叠后字符串的最大长度,unicode,normalization,unicode-normalization,case-folding,Unicode,Normalization,Unicode Normalization,Case Folding,我需要在一组字符串上执行大小写折叠,并且必须事先确保折叠完成后它们不会超过给定的长度(以硬编码所需的缓冲区大小)。问题在于,应用大小写折叠后,字符串长度(以代码点为单位)可能会发生变化。例如,见Python3: >>> "süß".casefold() 'süss' 现在,可以轻松计算执行大小写折叠后字符串可能包含的最大代码点数: >>> max(len(chr(s).casefold()) for s in range(0x10FFFF + 1)) 3

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

>>> "süß".casefold()
'süss'
现在,可以轻松计算执行大小写折叠后字符串可能包含的最大代码点数:

>>> max(len(chr(s).casefold()) for s in range(0x10FFFF + 1))
3
但它在所有情况下都有效吗?我的意思是,由于Unicode的某些神秘特性,代码点的顺序(它们出现的顺序)可能会影响字符串的最终长度吗?或者我可以假设最后一个字符串总是比原来的字符串长最多3倍吗?

定义如下:

toCasefold(X):将X中的每个字符C映射到Case_折叠(C)


因此,不管上下文如何,字符串中的每个字符都是大小写折叠的,结果是串联的。这意味着您的假设是正确的:casefolding字符串的代码点数最多保证为原始字符串的三倍。

请注意,小写和casefolding并不相同。你应该澄清你在这方面的问题。@nwellnhof:谢谢你的通知,我在问题中解决了它。