在Java中将光学等效的unicode字符串转换为ASCII?

时间:2013-11-24 02:05:36

标签: java string transliteration

我运行的社交网络要求unicode用户名是唯一的(如预期的那样)。

一些有创意的用户已经开始使用西里尔语(和其他)unicode字符创建光学等效(但不同于unicode)的用户名。

例如,他们会使用西里尔字母小写字母'а',看起来与罗马字母相同。

有没有人知道在Java中自动转换这些光学等效字符的方法?如果机制已经存在,我宁愿不必手动创建转换表。

2 个答案:

答案 0 :(得分:1)

你可以尝试Unicode normalization - 基本上,无法区分的代码点指定了一个“规范”代码点,规范化是用规范形式替换每个字符的过程。

Java似乎通过java.text.Normalizer支持Unicode规范化 - 更多信息here

但是,我不确定拉丁语A和西里尔语A在Unicode中被标记为等效 - 您必须尝试。

当您的用户开始使用非常相似的而不是相同的字符时,这也无济于事 - 人类非常有创造力,技术解决方案可能无法100%在此工作,因此,无论如何你可能不得不求助于人类节制。

还有一些其他解决方案 - 例如,将用户名限制为拉丁字母数字。

答案 1 :(得分:1)

为什么不尝试应用OCR库。