Dan*_*ien 3 unicode normalization utf unicode-normalization
如果我将Unicode规范化表单C应用于字符串,字符串中的代码点数量是否会增加?
是的,在应用NFC规范化后,有一些代码点可以扩展到多个代码点.内的基本多语种平面,例如,有施加NFC归一化之后扩大至2个点70个的代码点,并且有2个代码点(内U + FB2C和U + FB2D 按字母顺序呈现形式块),其扩展到3代码点.
您对此所谓的"扩展因子"的一个保证是,在应用NFC规范化后,任何字符串的长度都不会超过3倍(就代码单元数而言):
还有一个Unicode Consortium稳定性策略,规范映射在所有Unicode版本中始终受限,因此在使用NFC分解时,没有字符串扩展到超过3倍的长度(以代码单位测量).无论文本是UTF-8,UTF-16还是UTF-32,都是如此.此保证还允许在处理中进行某些优化,尤其是在确定缓冲区大小时.
第9节,检测规范化表格.UAX#15:Unicode规范化表单.
我编写了一个Java程序来确定Unicode块中的哪些代码点扩展到多个代码点:http://ideone.com/9PUOCb
或者,可以使用Tom Christiansen的unichars实用程序,它是Unicode :: Tussle CPAN模块的一部分.(注意:Mac用户可能会在make test安装步骤中看到错误,说Perl版本太旧了.如果看到此错误,可以通过notest install Unicode::Tussle在CPAN shell中运行来安装模块.)
例子:
在BMP中打印扩展到3个代码点的代码点:
unichars 'length(NFC) == 3'
?? ??? U+FB2C HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT ? ??? U+FB2D HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
计算扩展到多个代码点的所有平面中的代码点数:
unichars -a 'length(NFC) > 1' | wc -l
85
另请参见常见问题不同标准化表格的最大扩展因子是什么?
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |