2009-11-25 45 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

相關問題