2009-08-24 3 views
3

Ich habe eine Unicode (UTF-8 ohne BOM) Textdatei in einem Jar, das als Ressource geladen ist.Unicode in Jar Ressourcen

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

Dies funktioniert gut unter Windows, aber unter Linux scheint es nicht die Datei richtig zu lesen - akzentuierte Zeichen kommen gebrochen. Ich bin mir bewusst, dass verschiedene Maschinen verschiedene Standard-Zeichensatz haben können, aber ich gebe es den richtigen Zeichensatz. Warum sollte es es nicht benutzen?

+0

Wie Bestimmen Sie, wenn die Charaktere sind kaputt? Zum Beispiel ist 'System.out' defekt. –

+0

Die Daten werden als eine Webseite geliefert, die in UTF-8 geschrieben ist. Der HTTP-Header, der XML-Header und das HTTP-Äquiva- Meta sagen UTF-8, und der Browser bestätigt dies. –

Antwort

2

Der Leseteil sieht korrekt aus, ich benutze das ständig unter Linux.

Ich vermute, dass Sie die Standardkodierung irgendwo verwendet haben, wenn Sie den Text auf die Webseite exportieren. Aufgrund der unterschiedlichen Standardcodierung unter Linux und Windows haben Sie ein anderes Ergebnis gesehen.

Zum Beispiel verwenden Sie Standard-Kodierung, wenn Sie so etwas wie dies in Servlet tun,

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

Sie müssen speziell in UTF-8, so schreiben,

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

Ich frage mich, ob Überprüfung UTF-8 on Linux würde helfen. Könnte ein Setup-Problem sein.

+0

Ich gebe das Decodierungsschema an, was bedeuten sollte, dass die Einrichtung des Host-Rechners irrelevant ist. –