2013-11-24 171 views
2

我運行的社交網絡要求unicode用戶名是唯一的(如預期的那樣)。將等效的unicode字符串轉換爲Java中的ASCII碼?

一些有創意的用戶已經開始使用西里爾(和其他)unicode字符來創建光學等效(但unicode截然不同)用戶名。

例如,他們會使用西里爾文的小寫字母'a',它看起來與羅馬字母完全相同。

有誰知道的一種方式將這些等效光字符在Java中自動轉換?如果機制已經存在,我寧願不必手動創建轉換表。

+0

http://stackoverflow.com/questions/2096667/convert-unicode-to-ascii-without-changing-the-string-length-in-java/2097224#2097224 – user3020494

+0

這可能取決於使用什麼字體。棘手的問題。 – goat

+0

引用的答案不能解決手頭的問題。第一個答案只是刪除變音符號並將剩餘的非ASCII字符轉換爲'?'。有關Normalizer.Form.NFD的第二個答案根本不影響西裏爾字母'a'。 – OnesAndZeroes

回答

1

您可以嘗試Unicode normalization - 基本上,不可區分的代碼點具有指定的「規範」代碼點,規範化是將每個字符替換爲其規範形式的過程。

Java似乎通過java.text.Normalizer支持Unicode規範化 - 更多信息here

但是,我不確定拉丁語A和西里爾文A在Unicode中是否被標記爲等價物 - 您必須嘗試。

這也不會幫助你,當你的用戶開始使用的非常相似而不是相同人物 - 人類是非常有創造力和技術解決方案可能不會在這裏工作100%,所以你可能不得不求助於人無論如何適度。

也有一些其他的解決方案 - 限制了用戶名以字母數字拉丁語,例如。

+0

啊...我試過了正規化的做法,它看起來像一個拉丁和西里爾一個沒有標記爲等價的。看起來我可能只需要手動構建轉換表。遊民。 – OnesAndZeroes

+0

@OnesAndZeroes你以爲他們會是? –

1

你爲什麼不嘗試應用的OCR庫。

+0

是的,人們甚至可以靜態執行OCR並建立所需的翻譯表,而不必在飛行中進行OCR分析。 –

+0

我考慮寫一些東西來比較字符之間的像素,但決定只是手動通過unicode表。西里爾文,希臘文和拉丁文集似乎有最多的罪犯。最後還不錯。 – OnesAndZeroes

相關問題