- - PR -
受信メールの件名が文字化けで困っています(JavaMail)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-24 02:40
受信したメールの件名メールヘッダが
=?iso-2022-jp?B?(エンコードされた文字列)?= の形式の時、このエンコードされた文字列内に 機種依存文字列(たとえば、@AB@AB など) が含まれていた場合、 JavaMailのAPI「MimeUtility.decodeText()」 を使用してデコードを行うと、文字化けしてしまいます。 過去ログを探したのですが 具体的な、文字化け回避方法が見つかりませんでした。 本当に困っています・・・・・ サンプル的なソースコードやホームページを教えていただけると助かります。 | ||||
|
投稿日時: 2006-10-24 08:52
ISO-2022-JPのメールの件名(本文でも)機種依存文字を使う方が誤りです。文字コードをUTF-8(transfer-encodingはbase64)にしてもらえばいいのかもしれませんが・・
それはある意味正しい動作では?そもそも丸付き数字が入っているのにISO-2022-JPを書いているのは間違ってませんか>元メールの件名。 例えばphpのmb_convert_encoding関数での変換では、SJIS,EUC-JP,JISは丸付き数字でもOK(相互に変換可能)ですが、ISO-2022-JPに変換すると?に化けます(ISO-2022-JPはJISとは別物の動作になります)。 ちなみに普通のメーラだと化けないんですよね?(メーラは「何が何でも表示しよう」とするので相当に許容範囲が広いです) #多分このあたりは「自前で書く」しかないと思いますが・・ [ メッセージ編集済み 編集者: shimix 編集日時 2006-10-24 08:59 ] | ||||
|
投稿日時: 2006-10-24 09:17
そうなんですよ
自前でなんとか作成しようと思っていて いくつか文字コード変換について調べていたら 入出力ストリーム(http://ash.jp/java/stream.htm)で 文字化けを解決できそうと思っています。 私の思い込みかもしれませんが・・・・ また 下記の過去書き込みにある http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3706&forum=12&6 の最後の投稿メッセージに 「ISO2022JPのJISコード」を拾うにはどうしたらよいのでしょうか。 という所で止まってしまっています。 | ||||
|
投稿日時: 2006-10-24 10:22
http://www.yks.ne.jp/~tsurucha/ChangeLog/cat_e4bb8ae697a5e381aejakarta.html
参考までに。 私は文字化けで悩むのが面倒なので、 commons-emailと上記サイトのクラスを改造して使っていますが、 おおむね文字化けが発生せず使えています。 | ||||
|
投稿日時: 2006-10-24 10:46
MIME Bですから「base64でencodeされた部分」を抜き出して、base64のdecodeをすればいいと思います。最初の記事で「エンコードされた文字列」と書かれている部分だけを取り出して「base64のdecode」だけすればいいハズです。全体を渡してMIMEでdecodeをしようとすると文字コードが不正なので(ISO-2022-JPに存在しないコードがある)化けてしまいますが、中身は単純にJISだと思います(送信しているメーラの実装が多分そうでしょう)。 [ メッセージ編集済み 編集者: shimix 編集日時 2006-10-24 10:51 ] | ||||
|
投稿日時: 2006-10-25 16:57
そもそもこれは、
Javaの世界で「ISO-2022-JP」へのキャラクタセットに 文字をデコードするというJavaの処理で 機種依存文字については対応されていない。 ということなのでしょうか? 機種依存文字を1文字1文字リテラル文字で プログラム内に定数としてコーディングし、 メールデータ1文字1文字を、 機種依存文字がないか調べていく。 という方法しかないのでしょうか? | ||||
|
投稿日時: 2006-10-25 18:31
某企業の中ですが、decodeTextを自前で実装してますねえ。
| ||||
|
投稿日時: 2006-10-25 23:17
普通のメーラは正確にはISO-2022-JPでなくJISで送りますね。メール本文なども実際はそうしているハズです(で、キチンと?になっているとバグと言われる)。このあたりが「理想と現実」でしょうか(添付ファイル名のMIMEなどもそうですね。本来はRFC2231であるべきですが)。 mioさんが書かれたように「業務上何とかしないといけない」場合には自前で処理するしかないでしょう。 (追記) 「1文字1文字を、機種依存文字がないか調べていく。」というようなことはしなくてもJISだと思って処理すればいいのでは?JIS→SJISすればちゃんと戻せる状態になっているハズです。 [ メッセージ編集済み 編集者: shimix 編集日時 2006-10-25 23:22 ] |