• 締切済み

JavaMailのcharaset

Javaというより、メール一般の話だと思いますが。 メールを行う際に、日本語を送る際は、「ISO-2022-JP」がお約束になっていると思います。 このお約束は調べた限りだと、ISO-2022-JPでないと、 1)MTAが対応していない場合がある。 2)受信先のMUAが対応していない場合がある。 ということだと理解しています。 1)に関しては、Base64でENCODEすればいいような気がします。添付ファイルなどでは、MS932普通に使ってますし。 2)に関しても、現状ほとんどのMUAは対応しているような感覚なんですが。実際、OutlookExpress,gooメールやthunderbirdはWindows-31Jに対応してました。 メール本文のcharsetに「Windows-31J」を使用するのはやはり間違っているのでしょうか。エンドユーザの立場に立つと、普段普通に使用している文字(機種依存文字)が使用できたほうが良いのは間違いないでしょうから。

みんなの回答

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

結論から言うと間違っています。 メールを受信するユーザがWindowsマシン(Windows-31Jを理解できるマシン)を使用しているという保証がどこにあるのでしょうか。 ISO-2022-JPを使うのは、どのようなコンピュータでもメールを読めるように策定された最大公約数的な仕様です。 それに、すべての人がOutlookのようなグラフィカルなMUAを使用しているわけではありません。 またMTAに関しても、メーリングリストのようなものはBase64でエンコードしても結果的に文字化けしてしまうものもあります。 エンドユーザの立場に立つと、送られてきても読めないメールが存在しないほうが良いのは間違いないでしょう。

omajya
質問者

補足

相手を特定できない場合であれば、Windows-31Jは確かに良くないと思います。 今回、Windows-31Jの使用を考えた理由は、以下になります。 1)相手は特定できる。ただし、どんなメーラーを使用しているかはわからない。*使用可能なメーラーをお願いすることが可能。 2)他のシステムに格納されている項目をメールに印字する必要がある。ただし、機種依存文字を使用しているかどうかは定かではない。その項目はお客様の会社名である。 私はケースバイケースだと思うのですが。 エンドユーザの立場という点でも、視点の違いが大きいような気がします。(CUIのメールを使用している人の立場で見るか、Windows、Outlookしか使用していない人での立場でみるか。) ISO-2022-JPでは表現できない名前の方もいたりしますし。(ハシゴ高等) ISO-2022-JPが一般的とはいえ、所詮日本でしか通用しないローカルルールだと思います。そういう意味では、Windwos-31Jも変わらないと思いますので、UTF-8も試してみたのですが、gooメールで文字化けを起こしたので、あまり一般的ではないのかなと思いあきらめた経緯があります。 個人的には、多くのメーラーがUTF-8をサポートする方向に進むべきではないかと思っています。 いろいろ反発されそうなことばかり書きましたが、現状、不特定多数の方に送る場合は、ISO-2022-JPのほうが良いというのは、同意いたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JavaMail特殊文字付本文が文字化けで困ってい

    現在JavaMail(Ver1.4)+JAVA 7を使用して、あるメール配信システムを 構築しています。仕様上特殊文字を使用しなければならないので、 受信メールに特殊文字付本文が文字化けで困っています JavaMailのバッチがIBMのUNIX系AIXサーバ(文字コードがCP943C) に置いて、起動する メール本文データがIBMのDB2(文字コードがCP943C)から取得し、 Stringのhonbun_DB変数にいれる。 メール送信の本文が String honbun = new String(honbun_DB.getBytes("ISO-2022-JP"),"ISO-2022-JP") msg.setText(honbun,"ISO-2022-JP"); メールのヘッダーが msg.setHeader("Content-Type", "text/plain; charset="+"ISO-2022-JP"); msg.setHeader("Content-Transfer-Encoding", "7bit"); 問題点: getBytesでISO-2022-JP範囲外文字(いわゆる機種依存文字)すべて?に 置き返されます。 送信メールに、(1)(株)といった機種依存文字、NEC拡張外字が入っている 場合、文字が化けます。 ネットで得た対策方法について、以下方法が試しました。 対策1: Javaの起動オプション-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP付ける こちらのオプションがoracle者のJVMの有効で、現在のシステムがIBMのJVMを使用して いるので、効かないです。 対策2: 本文がshift-jisにする手もありますが、APPLE社のMAC、iphone端末で、同様に 機種依存文字が化けます。 対策3: String honbun = new String(honbun_DB.getBytes("ISO-2022-JP"),"ISO-2022-JP") の代わりに、getBytes()使用せずに、独自のCP943Cの文字コードからISO-2022-JP の文字コードに変換するロジックを組むという提案(機種依存文字でも、getBytes()みたいの ?に置き換えではなく、JIS範囲コードに変換)もあった。品質の懸念があるため、採用難しいところ。 上記対策1,2、3以外の方法があれば、教えていただけると助かります。 例えば対策3の機種依存文字か、ISO-2022-JP範囲内文字か、すべてJISコードに変換できる ライブラリなど 長文となって申し訳ありません。

  • JavaMailでiモードの絵文字を送信する際のcharset

    こんにちは。 OS:Windows2000 JDK:JDK1.4.1 JavaMail:JavaMail1.2 の環境で、iモードの絵文字を含んだ本文をメール送信するとき、 本文のcharsetをwindows-31jにしないと 文字化けが起こってしまいます。 これをcharsetの指定を、iso-2022-jpやShift_JISにして 文字化けしないようにするにはどのようにしたらよいか、ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • Base64での送信でタイトルが環境により文字化け

    CGI(Perl)のメールフォームで、 Base64エンコードでメール送信をするときに、 特定の文字列の組み合わせをエンコードしたものが、 環境によりタイトルだけ文字化けする現象が発生します。 GmailとWindowsメールで文字化けし、 Thunderbirdだと文字化けしないのですが、 原因と対応がわかる方がいれば教示いただけませんか。 Shift_JISの5Cなどとは根本的に異なりそうですが・・・ 以下、いくつかテストした文字列です。 「XXX」お問い合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?44CMWFhY44CN44GK5ZWP44GE5ZCI44KP44Gb44KS5Y+X44GR5LuY44GR44G+44GX44Gf?= Gmail:文字化け Windowsメール:文字化け Thunderbird:文字化けせず お問い合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?GyRCJCpMZCQkOWckbyQ7JHI8dSQxSVUkMSReJDckPxsoQg==?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 「XXX」おい合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?GyRCIVYbKEJYWFgbJEIhVyQqJCQ5ZyRvJDskcjx1JDFJVSQxJF4kNyQ/GyhC?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 「お問い合わせを受け付けました」 ↓ Subject: =?iso-2022-jp?B?GyRCIVYkKkxkJCQ5ZyRvJDskcjx1JDFJVSQxJF4kNyQ/IVcbKEI=?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 特定の一文字の問題ではないようなのですが・・・ またプログラム(一部抜粋)では下記のように変換しています。 ########################## use MIME::Base64; if($str =~ /[^!-~\s]/){ $str = encode_base64($str, ""); $str = '=?iso-2022-jp?B?' . $str . '?='; } ########################## よろしくお願いします。

    • ベストアンサー
    • CGI
  • Encode と encoding の同時使用で ISO-2022-JP に encode できない

    CentOS を 5.1 から 5.2 にアップデートした頃から PerlCGI からのメール送信が出来なくなって、調べていたら「ISO-2022-JP への encode がおかいぞ問題」に辿り着きました。 以下のコードで、euc-jp が吐かれてしまいます。 #! /usr/bin/perl -w use encoding('UTF8'); use Encode; binmode(STDOUT); my $text = "<全角文字ですよぉ。>"; print encode('ISO-2022-JP', $text), "\n"; 以下のいずれかで正常に jisコードを吐く様になるのですが、こんなものなんでしょうか? 1 「use encoding('UTF8');」 を 「use utf8;」に替える 2 print の直前に "no encoding;" を入れる CentOS 5.1 では多分正常に ISO-2022-JP への変換ができていたのだと思います。 私の使用するバージョンの Cygwin の Perl でも正常です。 問題のある CentOS5.2 と 問題の無い Cygwin版で、関係しそうなバージョンの違いはありません。 CentOS 5.2: Perl 5.008008 Encode 2.12 Encode::JP 2.01 encoding 2.02 Cygwin: CYGWIN_NT-5.1 **** 1.5.25(0.156/4/2) 2008-04-17 12:11 i686 Cygwin Perl 5.008008 Encode 2.12 Encode::JP 2.01 encoding 2.02 できれば、すでに動いているCGIの use encoding('UTF8'); を直す事なく動く様にしたいのです。

  • javamailにてメール文字化け

    javamailにて文字コードutf-8にてメール配信ソフトを作ってみたのですが、私の使っているモバイル nexus7のフリーメールに受信成功したのだが、文字化けしてしまいました。nezus7のメールソフトの エンコードがutf-8でないからだと判断。javamailの文字コードを途中でutf-8から該当しそうな(iso-2022-jpなど)にデコードしてから送信。しかし文字化けが治らず挫折してしまいました。utf-8なら 対応していると思ったのですが…。nexusの文字コードをどのように取得することができるかどなたかわかる方ご教授の程宜しくお願い申し上げます。 尚、content = new String(content.getBytes("utf-8"),"");""の部分にnexus7の文字コードに該当しそうな文字コードを数種類入れて実験!?してみました。どれも失敗。

    • ベストアンサー
    • Java
  • 海外への英文メール送信時の文字エンコード

    海外の複数の国々の方々に英文でEメールを送りたいと思います。文字化けを防ぐためには文字エンコーディングはどれを選択すればよいでしょうか。ISO-2022-JPやISO-8859-1など多数あってよくわかりません。本文・タイトルとも文字は半角英数字しか使用しません。ちなみにパソコンのOSはwindowsXP、メールソフトはThunderbirdバージョン 2.0.0.12 です。

  • Thunderbirdで転送時の文字化け

    Thunderbirdで転送しようとすると文字化けします。 楽天からのメール(文字コードISO-2022-JP)を転送したいのですが、 転送ボタンを押すとメール作成画面ですでに文字化けしています。 「以下ご予約が成立」が「$B!|!!0J2<$4M=」になりました。 また、その状態のままGmail当てに送ったら、「以下�竚癈鷭�」になりました。 上の2つが正しく見えるようにするにはどうすればいいか教えてください。

  • 文字エンコーディングの変更

    メーラーはThunderbirdを使っています。 今日メールを返信したら文字の一部が???に変わっていました。 文字エンコーディングを見ると、西欧(ISO-8859-1)にチェックが入っていました。 通常はISO-2022-JPだったように思うのですが、何故このようなことが起こるのでしょうか。修正はそのたびに変更できるのですが、いつもその操作が必要となると面倒くさいです。 対策を教えて頂けませんか。

  • 題名が化ける(本文は読める)

    タイトルの様に、 題名が化ける 本文は読める ・・・メイルを受け取っています。 日本語での、 アメリカからのメイルマガジンです。 ISO-2022-JP で送られてきます。 HTML形式です。 Content-Type: text/plain; charset="iso-2022-jp" Content-transfer-encoding: 8bit ・・・となっていますが、 どうして、8bit ? と思っています。 Encodingを、 Shift_JIS にすると、 題名は、見られますが、 本文が、化けます。 ISO-2022-JP にすると、 題名が化けますが、 本文が読めます。 どの様なMUAを使っているか、問い合わせていますが、 題名が、Shift_JIS 本文が、ISO-2022-JP ・・・の設定はあるのでしょうか? これを、統一すれば、化けないと思うのですが。

  • 開封確認のメッセージの件

    相手にメールの開封確認を求める設定にしてます。 日本語らしきところが文字化けしています、数字(開封時間など)は問題なく表記されています。 使用している文字エンコードはISO-2022-JPを使用してます。 現在PC環境:Window XP SP2. Thunderbird ver2.00です。

車検の前照灯検査について
このQ&Aのポイント
  • 車検の前照灯検査についての経過措置の有無
  • 車検の前照灯検査に合格するための具体的な方法
回答を見る

専門家に質問してみよう