2009-11-25 47 views
5

我试图评估不区分大小写的UTF-8字符串比较的不同策略。不知道语言的情况下折叠UTF-8

我已经阅读了一些来自Unicode联盟的材料,对ICU进行了实验并试图想出各种质量的实施方案。

多次我见过简单案例映射和完整案例映射之间的不同文本,我想确保完全理解它们之间的差异。

当我阅读它时,简单案例映射是“上下文无关”的,即不需要知道有效载荷是什么语言。由于突厥语“I /ı/İ/ i”的崩溃,这将给出近似的结果。

另一方面,完全大小写映射需要知道有效载荷的语言才能执行映射。有了这些额外的信息,它可以采取特殊措施,以涵盖作为突厥语字符串的“Kim”应该成为大写的“KİM”的情况,而作为英文字符串的“Kim”应该成为大写的“KIM”的情况。

我有这个权利吗?

是否还有其他示例针对不同语言折叠不同的“多面”代码点?

谢谢!

更新:提到简单案例映射为语言无关的来源之一是ICU's documentation。我将其解释为Unicode的真相,但也许它只是实现的一个声明?

回答

2

不,“完整的大小写映射”是一个代码点需要被多个新的代码点替换的框。一个简单的案例映射是一个单一的代码点替换。

如果你想自己实现,那么Unicode CaseFolding.txt文件是正确的。请注意状态字段代码“T”,特别是处理土耳其I问题。

+0

所以他们都需要语言环境,对吧?我使用不使用CaseFolding.txt的第三方库(PCRE),但仅使用来自UnicodeData.txt的案例信息,并且不需要语言上下文(就我所知,既不明示也不隐含)。我想这可能是简单情况下的一个有效妥协。 – 2009-11-26 06:47:21

+0

当然。如文件中所述,您需要知道何时忽略具有“T”状态代码的记录。 – 2009-11-26 12:29:33

+0

就我所见,T状态代码出现在CaseFolding中。txt,而不是UnicodeData.txt。但是你是否确实说过_correct_ folding只能通过语言环境的知识来完成?我正在寻找一种不需要上下文的妥协方案,并非100%完美......但也许这是通往温暖之路的第一步? – 2009-11-26 15:10:04

2

呃......对于大多数西方语言来说,辅音组合“SS”可能会缩写为“ss”,但在德语中可能会变成特殊字母“ß”。这只是“可能”,有相当多的usage rules考虑。

我认为这并不直接影响整理顺序(任何德国人当然欢迎纠正我),所以也许这是一个有争议的问题。

+0

谢谢!我是否正确理解了简单与完全映射的区别? – 2009-11-25 09:07:16

+3

虽然大写“ß”会给你“SS”,但我没有看到没有相反的框架(小写(“SS”)导致“ß”)。 这是因为有时应该是“ss”,唯一的决定方法是拥有一本完整的德语字典。有时甚至还不够(例如“weiss”和“weiß”都是正确的词)。事实上,即使没有上下文(即它的意思),甚至连一个人都不能将“WEISS”小写。 – 2009-11-26 08:15:42

+0

@Mhaihai - 谢谢,这很有道理。我有同样的想法,比起降低要容易得多。 – 2009-11-26 10:42:41

相关问题