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