- 締切済み
UNICODEへの文字コード変換
以下のようにして、 日本語で書かれたファイルを読み込んで、 UNICODEに変換したいのですが、 できません。。。 どこが間違っているのでしょうか?(;;) 元の日本語ファイル「こんにちは」 >>できたファイル「\u3053\u3093\u306b\u3061\u306f」 という風にしたいのですが。。 //FileIOSteramの作成 FileInputStream fis = new FileInputStream(iFile); FileOutputStream fos = new FileOutputStream(oFile); //Stream ラップ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); System.out.println(System.getProperty("file.encoding")); //読み込みと書き込み int c; InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); while((c = in.read()) != -1){ out.write(c); }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- betagamma
- ベストアンサー率34% (195/558)
自分も一ヶ月ぐらい前はまりました。結局ファイルを読み込まないことにしたので、具体的なコードは削除してしまい、残っていないのですが・・・ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); この"EUC-JP-LINUX"という文字列が怪しいです。この指定は、 http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html このサイトにかかれているように厳密に規定されていて、ハイフンとアンダーバーを間違えたりすると動かなくなります。これによると、 x-EUC-JP-LINUX EUC_JP_LINUX のようですので、ハイフンをアンダーバーにしてみるか、x-を前につけてみるかしてみてください。あと、 OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); のUTF16も、上記サイトによれば、UTF-16のようにハイフンを入れないとだめみたいです。 それから、大変疑問なのですが、最初にin,outをきちんと定義していながら、 //読み込みと書き込み InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); のように重ねて指定しているのはなぜでしょうか?この部分はいらないと思います。削除して実行してみてください。 とくに、 InputStreamReader in = new InputStreamReader(fis, "Unicode"); は、「fisで指定されたファイルをUnicodeだと思ってよめ」という意味になってしまいます。せっかく前の方で、EUCで読めと指定しているのに、上書きしてしまっています。 自分も同じようなソフトを作ったので、開発の時のリンクが残っています。参考にしてください。 http://niam.main.jp/pukiwiki/index.php?zhupinconv%2F%E9%96%8B%E7%99%BA#content_1_4
お礼
詳しい説明で、分かりやすかったです。 指摘された部分を修正してみたいと思います。 どうもありがとうございました!