2009-08-24 60 views
3

我在jar中有一个Unicode(UTF-8无BOM)文本文件,它是作为资源加载的。Jar资源中的Unicode

URL resource = MyClass.class.getResource("datafile.csv"); 
InputStream stream = resource.openStream(); 
BufferedReader reader = new BufferedReader(
    new InputStreamReader(stream, Charset.forName("UTF-8"))); 

这可以在Windows上正常工作,但在Linux上它看起来没有正确读取文件 - 重音字符出现破碎。我知道不同的机器可以有不同的默认字符集,但我给它正确的字符集。为什么不使用它?

+0

你是如何确定角色被打破了?例如'System.out'被破坏。 – 2009-08-24 01:16:52

+0

数据以网页形式发布,以UTF-8编写。 HTTP头,XML头和HTTP-equiv meta都声称UTF-8,浏览器证实了这一点。 – 2009-08-24 01:27:41

回答

2

阅读部分看起来是正确的,我一直在Linux上使用它。

我怀疑在将文本导出到网页时,您在某处使用了默认编码。由于Linux和Windows上的默认编码不同,您看到了不同的结果。

例如,你可以使用默认的编码,如果你不喜欢这样的servlet的东西,

PrintWriter out = response.getWriter(); 
out.println(text); 

您需要在UTF-8这样专门写

response.setContentType("text/html; charset=UTF-8"); 
out = new PrintWriter(
    new OutputStreamWriter(response.getOutputStream(), "UTF-8"), true); 
out.println(text); 
1

我不知道是否审查UTF-8 on Linux会有所帮助。可能是一个安装问题。

+0

我正在指定解码方案,这应该意味着主机的设置将无关紧要。 – 2009-08-24 01:47:18