2009-08-24 94 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