
現在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コードに変換できる
ライブラリなど
長文となって申し訳ありません。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この話は高級な話でもなくシンプルなことで、インターネットの話ではありません。
文字化けということをよく理解していない人が多いと思います。
文字をどう人に伝えるか、で、文字コードというものがあるわけです。
半角文字で知られる8ビット文字で、16進41とすれば、みんなでAという文字だと思おうという提案がありました。
これがASCIIコードという話です。漢字も何もない時代の話です。
保存するほう、読む方が同じルールで読み書きすれば問題ないはずです。
さらに、データのはじまりや終わりを示すマーク、これ以降別のルールでコードを処理するよという特殊記号を用意しました。
全然問題なくなるはずです。
しかしながらそうはいかなかった。ABC,abc,数字、!#などの記号を全部合わせても8ビット256の枠には余地があります。
さらに、英語ばかりというわけにいかないので、ある領域を半角カナにつかうことにしました。
ここが半角カナであるということが合意できている機械同士では間に合います。
しかし、ここをアキ領域だと思う日本語以外の文化のひとたちはウムラウト文字やティルド文字を割り付けます。
もしかれらが半角ドイツ語文としてデータを送信したとして、受け取り側がカナ文化圏なら異常に化けまくった文に見えます。
本来別のコードでやり取りしてる場合は「文字化け」という概念はなかったのです。
別の世界のコード同士ですから。
それが、一部でも共通したコードを使うから「文字化け」となるのです。
話をすこしはやめにします。
16ビットを使う全角コードというものがでてきて、日本語文字を統一するためにJISコードが現れます。
これはコンピュータの機種によって全員が共有できなかった。
半角のときに話しました、「別のルールでコードを処理する」というのはエスケープコードです。
これを使って漢字と半角を切り替えるとそのコードを読みそこなうとそれ以後の文が全部化けます。
そこで、それが不要な、最上位ビットをONにしたコードShift-JISというものがでてきたりします。
JISとShift-JISは相互変換可能ですから、相手がどちらのコードを読むかと意識すれば問題はないはずです。
しかしながら、ここでも「文字化け」が起きます。
機種依存文字です。○で囲んだ数字だとか括弧つきの株マークがそうなります。
また、パソコン通信ワープロ通信というものがさかんになり、アキ領域に自分らだけに通じる文字をいれる使い方をする人間が出ます。
猫マークだとか、禿おじさんとかを使いました。
さすがにこれは別の人にはつたわらないだろうと意識しているといいのですが、パソコン通信初心者は、まねき猫で記事を囲んで発信し、読めないのはなぜだという騒ぎになったことbがあります。
いいでしょうか。話はたったひとつのことです。
自分の使っている文字がどの範囲まで同じ意味で伝わるかです。
これはルールで決めているのですが、意識しなくなる人、最初から知らない人がでてきます。
また話を早めます。コードのサイズはさらに倍になります
UNICODEという、国際的に安全だということを目指して使う文字がでてきました。
日本語であれ中国語であれドイツ語であれ表現できる理想に向かいたいということです。
うまくいくか。かならずしもそうではない。
なぜか。そこに用意されていない文字があるからです。
漢字でいいますと、たとえば山崎の「崎」の文字だとか渡辺の「辺」の文字の、形が違うものがそもそもいくつもあります。
自分の名前の場合点がひとつないだけでもこだわって直させますから、ほんのちょっと違う異字を必要とするからです。
では、たとえば戸籍課がその字を作って処理したら、戸籍簿や住民票では大丈夫になりますが、別の市区町村に引っ越ししたらそれきりです。
もちろんそれをもとに社員名簿をつくろうとしたら会社でつくらなければなりません。
だから、非常に珍しい文字を使う名前の人は「あきらめる」しかないのです。
運用で対応する、という言葉になります。
こういう事情ですから、HTMLで文字コードを変更したりしても完璧になることはあり得ません。
SEは、特殊文字を使わないで済む運用提案をするべきなのです。
どうしても使いたければ、画像にして、文章のなかに<img>でいれるしかありません。
src=をサーバー内に登録しておけば、そのページを見る分については問題はなくなります。
hue2011さん
早速な回答ありがとうございました。
既存の同様機能の旧メール配信システムがあって、特殊文字が使用できて、
新旧比較でレベルダウンにならないように、いろな案を探しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Perl perlについての質問 2 2022/10/17 15:25
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【powershell】cdできないディ...
-
Thunderbirdのメールでクリック...
-
ビジネスメールで
-
返信時の署名位置について
-
LINEの返信について。大好きな...
-
メール送信時に表示されるメッ...
-
outlook2007で署名に無駄な空の...
-
長いURLをメールで送った際に途...
-
携帯の設定の状態がおかしいで...
-
アウトルックで自動返信したい...
-
仲の良い友達に5ヶ月以上未読無...
-
LINEとかTwitterのDMで長文を改...
-
受信者に開封確認を要求してい...
-
PCのメールに返事がないので送...
-
LINEで文章の最後にWをつける人...
-
【急ぎです】 EMSの署名等教え...
-
Outlook Expressで開封確認を[...
-
アウトルック2016 受信メールが...
-
友人からの悩み相談メールに返...
-
エンターキーで必ず2行改行さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【powershell】cdできないディ...
-
データ本体(exe、jpeg、iso)に...
-
スポンサーリンクが文字化け(?...
-
文字化けしたメモ帳(暗号勝負...
-
見字化けで困っています
-
OEの署名
-
ヤフオクでの文字化け
-
JISコードについて
-
SDに保存したメールがパソコン...
-
Windowsで全角文字を何文字か打...
-
ログインユーザー名に1が付く...
-
アンダーバーの入力
-
アンダーバーではなく上につい...
-
Yahooメールの絵文字の挿入は一...
-
IEで文字化け
-
エクセルのふりがな機能で。
-
JavaMail特殊文字付本文が文字...
-
%BE%A4%8Bみたいな記号
-
揵
-
gooの検索バーにある入力欄にお...
おすすめ情報