3

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

一些有创意的用户已经开始使用西里尔文(和其他)unicode 字符来创建视觉上等效(但 unicode 不同)的用户名。

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

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

4

2 回答 2

1

为什么不尝试应用 OCR 库。

于 2013-11-24T02:49:08.183 回答
1

您可以尝试Unicode 规范化- 基本上,无法区分的代码点具有指定的“规范”代码点,规范化是将每个字符替换为其规范形式的过程。

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

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

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

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

于 2013-11-24T02:13:30.273 回答