2011-11-18 23 views
2

以下はLinuxマシンでは動作しません。LinuxマシンでCharsetDecoderが動作しない

 Charset charset = Charset.forName("UTF-8"); 
     CharsetDecoder decoder = charset.newDecoder(); 

     try { 
      FileOutputStream fo = new FileOutputStream("hi.txt"); 
      PrintStream ps = new PrintStream(fo); 
      String msgBody = "ΣYMMETOXH"; 
      ps.println(decoder.decode(ByteBuffer.wrap(decoder.decode(ByteBuffer.wrap(msgBody.getBytes())).toString().getBytes()))); 
      ps.close(); 
      fo.close(); 
     } catch (CharacterCodingException e) { 
      e.printStackTrace(); 
     } 

このコードはWindowsで動作します。何が問題なの? Linuxマシンのデコーダでは、文字列をデコードしません。

+0

何か例外が発生しますか?それはファイルにゴミを印刷しますか?また、あなたのファイル名はかなりWindows特有ですが、Linuxがあなたの現在のディレクトリにこのような複雑な名前のファイルを作成できることは確かです。 – andri

+0

例外をスローしません。ファイルを作成し、 'msgBody'のデコードされた文字列の代わりに' msgBody'変数と同じものを書いています。 –

答えて

3

String.getBytes()を少なくとも1回、おそらく2回使用しているという問題があります(非常に長い行は読みにくく、いくつかのステートメントを使用すると分かりやすくなります)。これはエンコーディングを指定しないので、プラットフォームのデフォルトエンコーディングを使用します。その時点で、あなたはプラットフォームの依存関係を持っています...したがって、問題です。

あなたが達成しようとしていることはまったく明確ではありませんが、プラットフォーム固有の動作の理由を探している場合は、まずそれを見てください。

ああ、そのようなPrintStreamを作成すると、同じ問題が発生します...特定のエンコードでOutputStreamWriterを作成してください。

+0

getBytes()で "UTF-8"を指定しても、同じ問題が発生します。 –

+0

@ハリージョイ:実際に起こっていることと何をしようとしているのかを説明していないので、「同じ問題」が何を意味するのかははっきりしない。途中で 'PrintStream'を使用することについて私の注意してください。あなたのコードには*たくさんのエンコードとデコードがあります - その問題はいずれか(または複数)にある可能性があります。 –

+0

私はギリシャ語を解読してファイルに保存しようとしています。私はサーブレットでギリシャ語を 'ï£YMMETOXH'としています。上記のコードでデコードすると、Linuxマシンでは同じままですが、ウィンドウ上では正常に動作します。私は 'OutputStreamWriter'でも試しました。これも機能しません。 –

関連する問題