- PR -

EUCとSJISのファイルを取り込んで文字化けせずに出力するには?

1
投稿者投稿内容
たか
会議室デビュー日: 2004/10/22
投稿数: 4
投稿日時: 2004-10-22 09:39
はじめての投稿です。

文字コードEUCのテキストファイルと、
SJISで書かれたテキストファイルを読み込んでPrintlnで出力するプログラムを作ったんですが、EUCのファイルが文字化けして出力されてしまいました。

文字コードの異なるファイルを読み込んで文字化けしないように出力させるにはどうしたらよいのでしょうか?

すみませんが、皆様の知恵をお貸し下さい。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-10-22 10:16
おそらくFileReaderを使用してファイルの読み取りを行っていると思いますが、
FileReaderは読み取り対象ファイルのキャラセットが、そのマシンのOS固有のもの
であると決めうちして変換処理をします。

たとえば日本のWindowsマシン上で立ち上げたJavaプロセスで、FileReaderで正し
く読み取りが出来るのは、Shift_JIS(MS932)フォーマットのファイルのみです。

それ以外のキャラセットのファイルの読み取りには、キャラセット指定が出来るInputStreamReaderを使用します。
new InputStreamReader(new FileInputStream("file"),"charset");
たか
会議室デビュー日: 2004/10/22
投稿数: 4
投稿日時: 2004-10-22 10:44
シュンさん、ありがとうございます。

さっそくInputStreamReaderを使ってみたんですが、
第二引数のcharsetを"EUC_JP"にして実行したところ、
EUCのファイルは正しい日本語で出力されてSJISのファイルが文字化けして出力されてしまいました。
両方とも読み込んで文字化けしないようにするには、どんなcharsetを使用したらよいのでしょうか?

すみませんが、アドバイスよろしくお願い致します。
【今回ためしたcharset】
new InputStreamReader(new FileInputStream("file"),"EUC_JP");
ゆう
常連さん
会議室デビュー日: 2003/06/27
投稿数: 45
投稿日時: 2004-10-22 11:30
 ファイル読込時は、キャラセット名にJISAutoDetectを指定すると
Shift-JIS、EUC-JP、ISO 2022 JPを自動で判別してくれます。

 なお、ファイルへ書き込む場合には、OutputStreamWriterを使用
してキャラセットにShift-JISやEUC-JPを設定して出力すればよい
です。

 また、Javaでサポートされているエンコーディングの一覧は、
ドキュメントの「サポートされているエンコーディング」
(guide\intl\encoding.doc.html)にあります。(V1.4.0)
 基本機能の国際化のページです。


[ メッセージ編集済み 編集者: 悠 編集日時 2004-10-22 11:38 ]
しょうとう
会議室デビュー日: 2004/10/22
投稿数: 3
投稿日時: 2004-10-22 17:00
以下のように試しましたら、正しいの結果を取り得ることができます。
import java.io.*;

public class test {
public void readtest(){
try {
FileOutputStream fos = new FileOutputStream("f://hello.txt");
//OutputStreamWriter osw = new OutputStreamWriter(fos , "MS932");
//OutputStreamWriter osw = new OutputStreamWriter(fos , "Shift-JIS");
OutputStreamWriter osw = new OutputStreamWriter(fos , "EUC-JP");
BufferedWriter bw = new BufferedWriter(osw);
String msg = "こんにちは 世界";
bw.write(msg);
bw.close();
osw.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void writetest(){
try {
FileInputStream fis = new FileInputStream("f://hello.txt");
//InputStreamReader ir = new InputStreamReader(fis , "EUC-JP");
//InputStreamReader ir = new InputStreamReader(fis , "Shift-JIS");
InputStreamReader ir = new InputStreamReader(fis , "JISAutoDetect");
BufferedReader br = new BufferedReader(ir);
String msg = br.readLine();
System.out.println(msg);
fis.close();
ir.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
test a=new test();
a.readtest();
a.writetest();
}
}
たか
会議室デビュー日: 2004/10/22
投稿数: 4
投稿日時: 2004-10-23 14:12
シュンさん・悠さん・しょうとうさん

おかげさまで、解決する事が出来ました!
Javaの文字化け問題、いい勉強になりました(^^

ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)