- - PR -
ビット列を文字ストリームに変換する
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-07 21:10
こんにちは。
現在、ビット列を文字ストリームに変換し、Shift-JISでファイルに書き込むプログラムを組んでいます。 ところが、例えばShift-JISでは「ぐ」となるはずの「1000 0010 1010 1110(0x82AE)」というビット列を出力すると「?」となってしまうように、文字が正しく表記されません。 文字ストリームについて詳しい方がいらっしゃれば、是非文字ストリームの変換について御教授願います。 プログラムは下記のように組みました。 import java.io.*; public class ShiftJIS { public static void main(String[] args) throws Exception{ BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("result.txt"),"EUC-JP"));//"Shift-JIS")); int data[] = { 1,0,0,0,0,0,1,0,//0x82 1,0,1,0,1,1,1,0//0xAE }; int ss = 0; for(int i=0;i<16; i++){ ss = ss<<1 | data[i]; } ss = ss & 0xffff; out.write(ss); } } | ||||
|
投稿日時: 2007-02-07 21:53
Javaのcharの内部表現はUCS-2でShift_JISではありません。
0x82AEではなく0x3050にすればEUC-JPの「ぐ」が出ます。 #他にバグが無ければ。 | ||||
|
投稿日時: 2007-02-07 21:56
こんばんは
Javaは触らないので推測なのですが ssがint型(32bits)だからとかではないでしょうか? 出力されたファイルをバイナリエディタで見た結果はどのようになっていますか? Javaはビッグエンディアンと聴いた記憶があるので多分コードに問題がなければ 0x00 0x00 0x82 0xae などと出力されているんじゃないかと | ||||
|
投稿日時: 2007-02-07 22:54
Shift_JISのデータをShift_JISのまま出力したいなら、Writer系を使ってはダメです。Writer系はどうしてもUnicodeを経由しないといけないので。
これでOKだと思います。 | ||||
|
投稿日時: 2007-02-11 22:02
あしゅさん、未記入の方、スフレさん、お早い御返答をありがとうございました。
また、お返事が遅れてしまい、申し訳ありません。 アドバイスいただいたプログラムの結果を報告したいのですが、体調を崩しており、もうしばらくパソコンに触れそうにありません。 しかし、体調が回復次第かならずご報告いたします。 本当にありがとうございました。 |
1