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

标签 java string transliteration

我运行的社交网络要求 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/

相关文章:

java - 如何在 IntelliJ IDEA 中更改使用突出显示颜色

java - 玩!框架路线。长数据类型

java - 使用 ObjectMapper + JavaTimeModule 将 JacksonJsonProvider 注册到 Jersey 2 客户端

c# - C# 的印地语文本到英语音译

ruby - iconv 将来会被弃用,音译

ios - 音译/转置 NSString 中的字符

java - java中的垂直对齐文本没有正确显示

java - 有没有更简单的方法来拆分/重建字符串?

C++ 无法将 'const char*' 转换为 'std::string*'

c - 将 C 字符数组读入 double