2009-08-24 5 views
3

jarファイル内にUnicode(BOMなしのUTF-8)テキストファイルがあります。これはリソースとしてロードされています。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'は壊れています。 –

+0

データは、UTF-8で書かれたWebページとして配信されます。 HTTPヘッダー、XMLヘッダー、HTTP-equivメタはすべてUTF-8といい、ブラウザーはこれを確認します。 –

答えて

2

読み込み部分が正しいように見えますが、私はこれをLinuxで常時使用しています。

テキストをWebページに書き出すときにどこかでデフォルトのエンコーディングを使用したと思われます。 LinuxとWindowsではデフォルトのエンコーディングが異なるため、異なる結果が発生しました。

あなたはサーブレットでこのような何かを行う場合たとえば、あなたはデフォルトのエンコーディングを使用し、

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

私はデコード方式を指定しています。これは、ホストマシンのセットアップが無関係であることを意味するはずです。 –

関連する問題