Unicode Standard Annex #15描述了Unicode中的每个字符,对于四种规范化形式中的每一种,都具有" Quick_Check"有助于确定给定字符串是否处于该规范化形式的值。它继续在第9.1节中描述了这个" Quick_Check" value可以用于优化字符串到规范化字符串的串联以产生另一个规范化字符串:规范化只需要从最后一个" stable"左侧字符串中的字符,其中字符是"稳定的"如果它有" Quick_Check"如果所涉及的字符串很长,则通常比在整个连接字符串上重新运行规范化算法更有效。
这意味着我们可以这样连接:(这里假设参数s1
是我们知道已经在NFD中的字符串,而s2
是另一个不一定规范化的字符串)
def concat (s1, s2):
LSCP = len(s1) # Last stable character position
while LSCP > 0:
LSCP -= 1
if unicodedata.combining(s1[LSCP]) == 0 and has_nfd_qc(s1[LSCP]):
break
return s1[:LSCP] + unicodedata.normalize('NFD', s1[LSCP:] + s2)
unicodedata.combining()
允许我们找出角色的规范组合类。但是我们如何确定角色是否具有" Quick_Check" NFD的财产?换句话说,在上面应该用has_nfd_qc()
取代什么?
答案 0 :(得分:0)
与所有Unicode数据一样,您可以在Unicode字符数据库中找到这些属性。
快速检查属性位于文件DerivedNormalizationProps.txt
。
http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt
有关数据库的更多信息,请参阅Unicode Standard Annex #44。
您还应确保使用与unicodedata.normalize
相同的Unicode版本。旧版本的数据文件可在此处找到: