此問題涉及在索引中存儲本地名稱的國際字符規範化。我想一般性地討論這個問題,並且還會聽說Java中可能存在的解決方案(類/庫)。如何準備用於建立索引的Unicode字符串?
在全球的應用程序,用戶輸入他們的名字和應用程序寫入每個名稱到搜索索引,以便其他用戶可以搜索名稱和找到用戶。英文瑣碎,但在許多其他語言和/或全球範圍內並不那麼微不足道,因爲特定字母需要音譯和/或可以以多種形式書寫。例如,德國的名豪斯勒可以寫成
- 豪斯勒(德國)
- Haeussler(德國,國際音譯)
- 豪斯勒(瑞士)
- 豪斯勒(英文音譯)
Java擁有
Normalizer.normalize(entry, Normalizer.Form.NFD) // NFC
類,但這似乎不適用於許多情況和/或我不知道如何正確使用它。良好的閱讀也在這裏http://en.wikipedia.org/wiki/Unicode_equivalence但我找不到關於此主題的足夠的捆綁信息。
有人知道現有的開源項目,有人已經在這個問題上工作過嗎?任何可以使用的圖書館?網站?
你是如何將日文,中文,阿拉伯等音譯成英文的?像Facebook這樣的大型社交網絡如何音譯用戶名以確保其可以在國際上找到?
非常有趣的問題...我記得已經研究了另一個SO問題的標準化問題,目標是去除重音符號(我使用'Normalizer'分解後使用正則表達式)。然而,在國際上,即使是Unicode也不適合這個法案,我想......不知道這是否存在,但可能是一個將文本「翻譯」爲[IPA]的庫(http://en.wikipedia.org/wiki/IPA)? – fge 2014-11-01 02:39:05
另外:標題中的「Unicode字符串」是一種冗餘;儘管'char'實際上是一個UTF-16編碼單元(這就是爲什麼在BMP之外的代碼點需要兩個'char's)的時候,Java確實會使用Unicode,原因是當Java誕生時,Unicode只定義了現在已知的BMP) – fge 2014-11-01 02:43:37