2010-09-01 34 views
2

我目前正在开发一个应用程序来验证和解析CSV文件。 CSV文件必须以UTF-8编码,但有时我们会以错误编码获取文件。 CSV文件很可能包含德文字母的特殊字符(Ä,Ö,Ü,ß),因为CSV文件中的大多数文本都是德文的。Java:检测给定字符编码的不可显示字符

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

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

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

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

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

非常感谢大家的帮助! :)

此致 罗伯特不能被正确解码将与“替换字符”取代

回答

5

字节序列,\uFFFD,其上显示这样的:&#xFFFD ;.但是,如果输出设备不支持该字符,则可能会使用问号(?)代替。

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

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

+0

非常感谢,这工作完美! – 2010-11-16 23:18:22

1

如果文本是德语,并且编码不是UTF-8,则可能是windows-1252。或者与Windows-1252兼容,如ISO-8859-15。既然如此,Laforge的GuessEncoding应该就是你所需要的。我已经用了很多次,从来没有遇到过问题,而且这几乎完全用英文文本工作。德国人应该更容易被发现。

我看他还没有在他的博客或源文件中指定许可证,但我知道这些类用于Groovy,所以这应该不成问题。

+0

非常感谢您的回答!我会在明天尝试他们:) – 2010-09-02 15:25:31