- PR -

Unicode形式のファイルの読み込み方法。

1
投稿者投稿内容
キラヤマト
会議室デビュー日: 2004/05/26
投稿数: 12
投稿日時: 2004-06-01 18:16
OS Linuxで
EUC-JP形式でテキストファイルを作成しました。
それを native2asciiで変換し Unicodeにしました。

それをプログラムで読み込み処理したいのですが
読み込み、表示すると文字化けてしまいます。
読み込んだ文字列を charAtとかで 比較したいのですが
うまくいきません。
どのように ファイルを読み込めばいいのでしょうか?

FileInputStream abc = new FileInputStream("/home/test/unicode.txt");
InputStreamReader in = new InputStreamReader(abc,"UTF-8");
BufferedReader br = new BufferedReader(in);
String msg = br.readLine();
// 表示
System.out.println(msg);
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-06-01 19:11
UTF-8ではなく、ISO8859-1で読み込めば、いけそうな気がします。

ちなみに、native2asciiはUnicodeコード(\u9999みたいな)に変換して出力するツールで、utf-8には変換しません。
キラヤマト
会議室デビュー日: 2004/05/26
投稿数: 12
投稿日時: 2004-06-01 19:17
すいません やはり(x_x)でした。

内部的に Unicodeだから
System.out.println()で見ようとしても
みれないということなのでしょうか?
キラヤマト
会議室デビュー日: 2004/05/26
投稿数: 12
投稿日時: 2004-06-01 19:39
同じように プロパティ形式のテキストファイル(XX=BBB)は
読み込む際に  プロパティオブジェクトを用いて
読み込むので ストリームから ロードされる際に
ISO8859_1でエンコーディングされます。

それ以外のテキストファイルは Unicodeにしないで
読み込むInputStreamReaderで Unicodeで読み込めばいいのでしょうか?

プロパティ形式以外の Unicodeのテキストファイルを読み込む方法が
あるのでしょうか?

初歩的なことなのかもしれませんがアドバイスお願いします。
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-06-01 19:48
引用:

キラヤマトさんの書き込み (2004-06-01 19:17) より:
すいません やはり(x_x)でした。

内部的に Unicodeだから
System.out.println()で見ようとしても
みれないということなのでしょうか?


たぶん勘違いされていると思うのですが、native2asciiの出力結果は、元のEUC-JPをUTF-8(や、なんらかのUnicode系のエンコーディング)に変換したものではありません。

プラットフォーム依存のネイティブエンコーティング(SJISだのEUC-JPだの)で記述されているテキストファイルを、1文字ずつ「ユニコードエスケープ」した結果のASCII文字列です。

およそどんなエンコーディングでもASCIIとは互換性があるので、UTF-8を指定しようとISO-8859-1を指定しようと、ファイルを読み込むこと自体はできますし、文字化けもしていないでしょう。

「\u4f50\u3005\u6728」のような文字列のことを指して、「文字化け」といっておられるのだと思いますが、これは文字化けではありません。

そして、おそらくキラヤマトさんは、「\u4f50\u3005\u6728」のようなユニコードエスケープ文字列ではなく、「佐々木」のような意味のわかる文字列が得られることを期待されているのですよね?

だとすると、「ユニコードエスケープ文字列をString(あるいはchar)に変換する簡単なAPI」は残念ながらないみたいです。がりがりと泥臭くコーディングするほかありません。(Commonsあたりにあったりするのかな?)
キラヤマト
会議室デビュー日: 2004/05/26
投稿数: 12
投稿日時: 2004-06-01 19:59
そうなんですか?

では プロパティクラスで読み込んだ結果は
System.out.println()できれいに 表示されるのは
なぜなんでしょうか?

泥臭く コーディングというのは
Stringクラスとかで エンコードするということなのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-01 20:28
>では プロパティクラスで読み込んだ結果は
>System.out.println()できれいに 表示されるのは
>なぜなんでしょうか?
Properties クラスをご覧になってはいかがでしょうか。
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-06-02 09:45
引用:

では プロパティクラスで読み込んだ結果は
System.out.println()できれいに 表示されるのは
なぜなんでしょうか?


SunのSDKだと java.util.Properties#loadConvert(String)あたりかな。
ユニコードエスケープの復元処理がゴリゴリゴリと書いてあります。

[ メッセージ編集済み 編集者: 佐々木 編集日時 2004-06-02 09:48 ]
1

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