首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unicode::规范化-关于“规范化”的查询

Unicode::规范化-关于“规范化”的查询
EN

Stack Overflow用户
提问于 2011-07-21 06:02:27
回答 1查看 440关注 0票数 3
代码语言:javascript
复制
#!/usr/local/bin/perl
use warnings;
use 5.014;
use Unicode::Normalize qw(NFD NFC compose);


my $string1 = "\x{f5}";

my $NFD_string1 = NFD( $string1 ); 
# PV = 0x831150 "o\314\203"\0 [UTF8 "o\x{303}"] *

my $composed_NFD_string1 = compose( $NFD_string1 ); 
#  PV = 0x77bc40 "\303\265"\0 [UTF8 "\x{f5}"] *

my $NFC_string1 = NFC( $string1 );
#  PV = 0x836e30 "\303\265"\0 [UTF8 "\x{f5}"] *


my $string2 = "o\x{303}";

my $NFD_string2 = NFD( $string2 );
#  PV = 0x780da0 "o\314\203"\0 [UTF8 "o\x{303}"] *

my $composed_NFD_string2 = compose( $NFD_string2 ); 
#  PV = 0x782dc0 "\303\265"\0 [UTF8 "\x{f5}"] *  

my $NFC_string2 = NFC( $string2 );
#  PV = 0x7acba0 "\303\265"\0 [UTF8 "\x{f5}"] * 

# * from Devel::Peek::Dump output


say 'OK' if $NFD_string1 eq $NFD_string2;
say 'OK' if $NFC_string1 eq $NFC_string2;

输出:

好的 好的

在尝试之后,我问我:是否有理由使用Normalization Form D而不是Normalization Form C

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-21 19:33:00

并不是所有的东西都有复合形式,NFC实际上首先做的是NFD。NFD的一部分是在初学者字符之后按顺序排列连续字符,因此您可以比较两个字素集群(一个初学者的花式名称以及它的连续字符),以查看它们是否相同。对于本例中所做的工作,您应该得到相同的答案,但是NFC实际上做了更多的工作。

有几个原因,有些东西没有一个特别的NFC版本。其中许多来自历史字符集。“é”的合成版本是为了让拉丁语1人感到高兴。还有e和‘版本的设计,让你可以建立你自己的字形。有很多种方法可以做到这一点,而不仅仅是口音和音质。字素簇可以有几个连续字符,当你自己构建它们的时候,你可以把它们按你喜欢的任何顺序排列(不管出于什么原因)。然而,他们已经分配了权重。NFD会根据它们的权重对它们进行重新排序,这样你就可以比较两个字形星系团,尽管你使用的顺序。

正如达辛姆在评论中所说的那样,这一切都发生在Unicode技术报告15上。你会想看一下图表,然后看看上面写着的部分:

一旦字符串被完全分解,它包含的任何组合标记序列都会被放入一个定义良好的顺序。这种组合标记的重排是根据Unicode规范化算法的一个子部分进行的,称为规范排序算法。该算法根据Canonical_Combining_Class (ccc)属性的值对组合标记序列进行排序,其值也在UnicodeData.txt中定义。大多数字符(包括所有非组合标记)的Canonical_Combining_Class值为零,并且不受规范排序算法的影响。这样的字符是由一个特殊的术语,启动器。只有具有非零Canonical_Combining_Class属性值的组合标记的子集才会受到规范排序算法的潜在重排序。这些字符被称为非起始字符。

有些东西对它们的数据显式地使用NFD,比如HFS+文件系统。在许多情况下,这并不重要,因为编程语言可能绑定到库函数,这些函数将文件名字符串转换为正确的形式。

今天晚些时候,我将上传Unicode::支持,它演示了许多这些东西。

今天晚些时候,汤姆会来教我们所有人。:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6771889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档