- PR -

Jakarta Jamesで機種依存文字の変換

1
投稿者投稿内容
松川(日々精進)
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-04-22 20:36
いつもお世話になっています。
Jakarta Jamesでアプリケーションを作ることに
なりまして色々と調べています。

環境
Windows2000
JDK1.4.2_06
Jakarta James2.2.0
JavaMail 1.3.1 (※Jamesに同梱)

テスト環境として、OutlookExpressを使い、
メーレットに機種依存文字を含めた
「てすとメール鰍いうえお」
という文章を送りWindowsのコンソールに
出力したいのですが、ISO-2022-JPから
UNICODEへの変換が上手くいっていないようで、
「てすとメール?あいうえお」
と出力されてしまいます。
Jamesの起動パラメータにJavaMail用のプロパティ設定
"-Dmail.mime.decodetext.strict=false"
"-Dmail.mime.address.strict=false"
を追加したりしてみたりしたんですが状況が
変わらず悩んでおります。
ユーザーさんに機種依存文字を使わないようにと啓蒙
するのではなく、例えば鰍(株)に置換してあげたいなと
考えているので、どなたかお知恵を授けていただけませんで
しょうか、よろしくお願いいたします。

※"〜"文字などのUNICODEがらみの変換方法はなんとか調べ
がついております。




[ メッセージ編集済み 編集者: 松川(日々精進) 編集日時 2005-04-22 20:37 ]
ねく
会議室デビュー日: 2005/04/19
投稿数: 11
お住まい・勤務地: Tokyo
投稿日時: 2005-04-23 00:10
ねくです。こんばんは。

確かJavaのISO-2022-JPコンバータの問題だったと思いますので、設定等では回避できないかと思われます。

自分の場合は、受信メールから生のバイト列を取得して、それをShift_JISのバイト列に変換するコードを書いて対応しました。

参考になれば。
松川(日々精進)
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-04-23 01:40
夜遅くにご返答ありがとうございます。

引用:

確かJavaのISO-2022-JPコンバータの問題だったと思いますので、設定等では回避できないかと思われます。



やはり設定などではダメなんですね、なるほど。
甘くないんですね、メールの受信処理は。

引用:

自分の場合は、受信メールから生のバイト列を取得して、それをShift_JISのバイト列に変換するコードを書いて対応しました。



以前対応されたというこの方法についてなのですが、MimeBodyPartのgetRawInputStream
などを使って処理を行われたのでしょうか、たとえば1バイトづつ読み出しながら判断するような。
よろしかったら教えていただけませんでしょうか。



[ メッセージ編集済み 編集者: 松川(日々精進) 編集日時 2005-04-23 01:45 ]
ねく
会議室デビュー日: 2005/04/19
投稿数: 11
お住まい・勤務地: Tokyo
投稿日時: 2005-04-23 10:20
引用:

以前対応されたというこの方法についてなのですが、MimeBodyPartのgetRawInputStream
などを使って処理を行われたのでしょうか、たとえば1バイトづつ読み出しながら判断するような。


・全角なら2バイト取得->Shift_JISへ変換してバッファへ格納
・それ以外ならASCIIとみなして1バイトをバッファへ格納
・変換が終わったらバッファのバイト列を
   String tmp = new String(buf,"MS932");
 のようにして文字列へ。

charsetを見て、それがISO-2022-JPの場合はこんな処理を行うようにしていました。
松川(日々精進)
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-04-24 01:10
ねくさん、どうもありがとうございました。やはり
ISO-2022-JP(JISコード)で来た生バイトデータか
らSJIS(MS932)に変換する処理を自前でやる必要が
あるんですね。ISO-2022-JPバイト列をMS932のバイト列
に変換する処理を作って対応してみます。定番の
クラスライブラリとかあるのかなと思ったんですが、
そういったものは無いようで・・・。
どうもありがとうございました。

1

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