2015-08-08 58 views
1

誰能請解釋一下我爲什麼從U + 2126(Ω),並在相同的表示U + 03A9(Ω)結果和NFD正常化不會保留的代碼點?我只能預料到NFKD和NFKC(以及符號變音符號)的這種行爲。正常化不會保留碼點

result1 = unicodedata.normalize("NFD", u"\u2126") 
result2 = unicodedata.normalize("NFD", u"\u03A9") 
print("NFD: " + repr(result1)) 
print("NFD: " + repr(result2)) 

輸出:

NFD: u'\u03a9' 
NFD: u'\u03a9' 

回答

2

這些被稱爲 「單分解」,並且存在對於像U + 2126(Ω)中存在的Unicode進行與現有標準兼容字符。它們不是「兼容性分解」(如U + 1D6C0),因爲它們在視覺和語義上與另一個代碼點(在這種情況下,U + 03A9Ω)相同。

因爲它們基本上重複另一碼點,一個被選作「優選的形式」,當歸一化(成任何形式)另一總是由它取代。第一種形式基本上已被棄用。指着我這個答案

+0

謝謝,我已經標記爲[我的問題](http://stackoverflow.com/questions/33945665)爲重複。這解釋了爲什麼ICU標準化器按照其工作方式工作 - [詳情請參見參考](http://unicode.org/reports/tr15/#Primary_Exclusion_List_Table)。我仍然很難理解Unicode爲什麼這樣工作。希臘問號(U + 037E)*在語義上是否與分號(U + 003B)相同?或者另一個例子:U + 2000分解爲U + 2002。看起來它們都是同時添加的 - 那麼爲什麼在標準中包含U + 2000呢? – Zilk

+0

感覺就像我瞭解的Unicode的越多,我知道的越少...我想我真正需要的是討論這樣的問題,比如一個郵件列表或新聞組或論壇的地方。到目前爲止,我還沒有找到一個。 – Zilk

+2

語義相同?一點也不。這就是爲什麼兩個代碼點都存在的原因 - 如果你需要語義上的區別,你不應該規範化。但是,在許多情況下,這可以從上下文中確定,並且具有兩個視覺上相同的字符只會導致問題,所以Unicode標準爲它們提供了規範的等價物。 Unicode聯盟運行一個[郵件列表](http://unicode.org/consortium/distlist-unicode.html),你可能會發現有幫助。 –