- PR -

文字化けについて

投稿者投稿内容
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2003-08-05 12:22
みなさん色々ありがとうございます。
JDK1.3を使用しており、
str.getBytes("MS932")
でも文字化けは回避できませんでした。

http://www.gimlay.org/~javafaq/S146.html
より、
>この問題を根本的に解決する方法は今のところなく、正しい処理が行われるよ
>うに、適時文字コード変換を行うしかありません。
結局こういうことで、
http://java-house.etl.go.jp/ml/archive/j-h-b/014452.html
に書かれているように文字コード変換フィルタを作成するしかないのでしょうか?
これの意味も余り良くわからないのですけど・・・・。


[ メッセージ編集済み 編集者: JBOY 編集日時 2003-08-05 12:24 ]
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2003-08-05 12:40
引用:

JDK1.3を使用しており、
str.getBytes("MS932")
でも文字化けは回避できませんでした。


okuさんが
引用:

とりあえず以下のように変更することで ? に変わってしまうことは避けられるかと思いますが、・・・
byte[] buf = str.getBytes("SJIS");


と書かれていますが、試されましたか?

皆さん書かれているようにstrをどのように構築したかによります。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-05 12:54
引用:

皆さん書かれているようにstrをどのように構築したかによります。



にも関連することですが、strの段階で文字列が正しく構築されているんですよね。
デバッガ等で、strの中身を確認し、この時点で文字化けしていれば、コード変換フィルタなんか作っても無駄だと思いますよ。
BBC
常連さん
会議室デビュー日: 2002/03/15
投稿数: 37
お住まい・勤務地: 東京
投稿日時: 2003-08-05 14:11
再びこんにちは。

引用:

str.getBytes("MS932")
でも文字化けは回避できませんでした。



なるほど、読み込み時のUNICODEへのマッピングが正しくないようですね。
とりあえず、こうしてみるとどうでしょう?

コード:
FileOutputStream out = new FileOutputStream("hoge");
str = str.replace('\u2212', '\uff0d');
byte[] buf = str.getBytes("MS932");
out.write(buf); 



これで正しく出力されるようであれば、
http://java-house.etl.go.jp/ml/archive/j-h-b/014452.html
で出ている変換プログラムも意味があると思います。
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2003-08-05 14:27
byte[] buf = str.getBytes("SJIS");
を実行したところ、化けずに正常に出来ました。

JavaのShift_JISはMS932またはSJISの別名として定義されていて
JDK1.3・・・MS932
JDK1.4・・・SJIS
となっていたんですね。
文字化けは回避できたのですが、MS932とかSJISとかWindows-31Jとかの違いが良くわからないのでもう少し勉強してみようと思います。

ご協力していただき、本当にありがとうございました。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-08-05 18:48
@IT会議室をWindows-31Jで検索するだけでも結構な情報がありますよ。

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