我运行的社交网络要求unicode用户名是唯一的(如预期的那样)。
一些有创意的用户已经开始使用西里尔语(和其他)unicode字符创建光学等效(但不同于unicode)的用户名。
例如,他们会使用西里尔字母小写字母'а',看起来与罗马字母相同。
有没有人知道在Java中自动转换这些光学等效字符的方法?如果机制已经存在,我宁愿不必手动创建转换表。
答案 0 :(得分:1)
你可以尝试Unicode normalization - 基本上,无法区分的代码点指定了一个“规范”代码点,规范化是用规范形式替换每个字符的过程。
Java似乎通过java.text.Normalizer
支持Unicode规范化 - 更多信息here。
但是,我不确定拉丁语A和西里尔语A在Unicode中被标记为等效 - 您必须尝试。
当您的用户开始使用非常相似的而不是相同的字符时,这也无济于事 - 人类非常有创造力,技术解决方案可能无法100%在此工作,因此,无论如何你可能不得不求助于人类节制。
还有一些其他解决方案 - 例如,将用户名限制为拉丁字母数字。
答案 1 :(得分:1)
为什么不尝试应用OCR库。