- PR -

Javaプログラムでのファイルの文字コード判定

1
投稿者投稿内容
くりお
常連さん
会議室デビュー日: 2004/01/30
投稿数: 34
投稿日時: 2006-02-08 21:03
あるファイルの文字コードを自動で判定をするようなJavaプログラムを実装しようとしています。

しかしJavaプログラムでいくらロジックを組もうとしても、
FileInputStreamで読み込んだ時点でUnicodeに変換されてしまっており
元のファイルの文字コードの情報がとれません。

Pure JavaだけでOSファイルの文字コードの自動判定は不可能なのでしょうか?

※この要望をJavaで満たすためには、
 Native言語で作成したバイナリをRuntime.exec、JNIなどで呼び出すしか方法はないと思っていますが、他に方法がありましたら、ご提示いただけると助かります。

べう
会議室デビュー日: 2004/01/23
投稿数: 17
投稿日時: 2006-02-08 21:44
FileInputStream#read はバイト単位でファイル内容を持って来るので、ファイルの内容はそのまま見えてます。

たとえば、EUC-JP で「テスト」と書かれたファイルに対して
FileInputStream stream = new FileInputStream("HOGE.txt");
int c;
while ((c = stream.read()) != -1) {
System.out.print(" " + Integer.toString(c, 16));
}
などとすると、a5 c6 a5 b9 a5 c8 などと EUC-JP のコードが取得できてます。

[ メッセージ編集済み 編集者: べう 編集日時 2006-02-08 21:51 ]
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-02-08 21:51
この場合、文字コードの判定は、FileInputStreamから取得した
byte配列を使って、やるんだよ。
取得したbyte配列をStringに放り込んでから・・・なんてのは無理でっせ。
くりお
常連さん
会議室デビュー日: 2004/01/30
投稿数: 34
投稿日時: 2006-02-09 09:37
情報のご提供ありがとうございます。

FileInputStream#read()でbyte配列が取れるんですね。
この方法でやってみます。

1

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