java - 检测哪个字符与特定编码不同的最快方法
问题描述
目前我有一个异常,告诉我当整行包含无效的 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();
}
}
解决方案
您可以尝试使用Apache Tika来检测字符串的编码。
例子:
CharsetDetector detector = new CharsetDetector();
detector.setText(string.getBytes());
detector.detect();
然后您可以将您的字符串从原始字符集转换为任何人:
detector.getString(yourStr.getBytes(), "utf-8");
推荐阅读
- ruby-on-rails - 如何在 ralis 的同一张表中维护不同的计数器
- linux - 如何将值从 .data 转移到 NASM 中注册?
- c - 在 C 中实现 Y86 Fetch 指令
- python-3.x - 为什么不渲染来自字节流的图像?
- ios - 有没有办法实时控制 iPhone 振动的强度
- javascript - 有没有办法检查我的 WordPress 网站中是否正在使用文件?
- opengl - 如何使用 ImageLoad() 访问深度纹理?
- c# - Linq Groupby在c#中没有分组
- git - 如何获取项目内所有 git 存储库头的提交 ID?
- java - 我怎样才能使我的应用程序 MS EDGE 兼容