首页 > 解决方案 > 检测哪个字符与特定编码不同的最快方法

问题描述

目前我有一个异常,告诉我当整行包含无效的 ISO 8859-1 字符时,但我想准确检测它是哪一个。

我可以检查字符串中的每个字符,但这会非常低效。

这样做的目的是向该工具的用户报告他们写了一个无效字符,例如 €</p>

输入:

Hello fri€nd

输出:

Error in € (index 9)

有没有快速有效的方法来实现这一目标?

实际方法的片段:

public void writeLine(String line) throws EncodingException {
    try {
        if (!Charset.forName("ISO-8859-1" ).newEncoder().canEncode(line)) throw new EncodingException();
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    } catch (IOException e) {
        e.printStackTrace();
    }   
}

标签: javaencoding

解决方案


您可以尝试使用Apache Tika来检测字符串的编码。

例子:

CharsetDetector detector = new CharsetDetector();
detector.setText(string.getBytes());
detector.detect();

然后您可以将您的字符串从原始字符集转换为任何人:

detector.getString(yourStr.getBytes(), "utf-8");

推荐阅读