Java:检测给定字符编码的不可显示字符

我目前正在开发一个应用程序来validation和解析CSV文件。 CSV文件必须以UTF-8编码,尽管有时我们会以错误编码方式获取文件。 CSV文件很可能包含德语字母(Ä,Ö,Ü,ß)的特殊字符,因为CSV文件中的大多数文本都是德语。

对于validation器的一部分,我需要确保该文件是UTF-8编码的。 只要不存在特殊字符,解析时很可能没有问题。

到目前为止我所尝试的是将文件作为字节读取并使用一些库来检测(或猜测)编码。 我尝试了这篇博文的大部分可能性: http : //fredeaker.blogspot.com/2007/01/character-encoding-detection.html

但我尝试的所有库都没有返回正确的编码,因此我无法解析特殊字符。

现在问我的问题:有没有办法确定像UTF-8这样的给定字符编码来检测未正确编码的字符? 所以基本上(Eclipse)控制台中显示的字符作为问号标记。

或者有没有其他方法来正确确定字符编码? 我只需要知道它是否是UTF-8。

提前谢谢大家的帮助! 🙂

最诚挚的问候,罗伯特

无法正确解码的字节序列将替换为“替换字符” \uFFFD ,其显示如下: 。 但是,如果输出设备不支持该字符,则可能会使用问号(?)。

因此,在将UTF-8数据解码为String对象后,搜索\uFFFD出现\uFFFD

或者,如果您使用自己创建的CharsetDecoder实例设置InputStreamReader ,则可以获得更多控制权。 例如,您可以指定如果任何无法解码的字节序列,则应引发Exception 。 或者你可以忽略它们。 或者,您可以指定其他字符作为替换字符。

如果文本是德语并且编码不是UTF-8,则可能是windows-1252。 或者与windows-1252兼容的东西,如ISO-8859-15。 既然如此,Laforge的GuessEncoding应该就是您所需要的。 我已经使用了很多,从来没有遇到任何问题,而且几乎只使用英文文本; 德语应该更容易被发现。

我发现他仍然没有在他的博客或源文件中指定许可证,但我知道这些类在Groovy中使用,所以这应该不是问题。