java - 如何从 UTF-8 输入中检测脚本系统/字母表?

标签 java unicode utf-8 icu

我目前正在构建一个基于 icu4j 的音译 Web 界面。自动检测用户输入查询是什么的脚本系统的最佳方法是什么?

例如如果输入是“ body ”或“ body ”,我如何/应该识别它来自哪个脚本系统?

最佳答案

最简单的方法是检查第一个字符的脚本:

static Character.UnicodeScript getScript(String s) {
    if (s.isEmpty()) {
        return null;
    }
    return Character.UnicodeScript.of(s.codePointAt(0));
}

更好的方法是找到最常出现的脚本:

static Character.UnicodeScript getScript(String s) {
    int[] counts = new int[Character.UnicodeScript.values().length];

    Character.UnicodeScript mostFrequentScript = null;
    int maxCount = 0;

    int n = s.codePointCount(0, s.length());
    for (int i = 0; i < n; i = s.offsetByCodePoints(i, 1)) {
        int codePoint = s.codePointAt(i);
        Character.UnicodeScript script = Character.UnicodeScript.of(codePoint);

        int count = ++counts[script.ordinal()];
        if (mostFrequentScript == null || count > maxCount) {
            maxCount = count;
            mostFrequentScript = script;
        }
    }

    return mostFrequentScript;
}

关于java - 如何从 UTF-8 输入中检测脚本系统/字母表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047223/

相关文章:

mysql - 如何从 MySql 列中删除或转换非 UTF 8/UTF-8 字符

java - 通过在 java 中使用 UTF-8 字符集输出流将 UTF-16 字符写入文件,但文件中的结果数据仍然是 UTF-16。为什么?

java - 将android TCP客户端连接到java TCP服务器时出现异常

java - 如何拦截url并将其重定向到jsp页面?

c - char16_t 和 char32_t 到底是什么,我在哪里可以找到它们?

java - 如何使用 ICU 库转换日语半角/全角字符

java - 比较 Maven 中的 Java 字符串传递编码

java - 未找到 [SaajSoapMessage 的端点映射,SOAP WS 执行期间出现异常

java - 获取所有值而不是 selenium 中选定的值

c# - 我可以使用 Unicode 解码 HTTP 请求吗?