現在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で質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【powershell】cdできないディ...
-
JISコードについて
-
FACEBOOKの文字化け
-
「%8」又は「・」に文字化け
-
サクラチェッカーってあるじゃ...
-
Thunderbirdのメールでクリック...
-
受信者に開封確認を要求してい...
-
ビジネスメールで
-
返信時の署名位置について
-
メール送信時に表示されるメッ...
-
Outlook Expressで開封確認を[...
-
「ぬきすと」というサイトで詐...
-
outlook2007で署名に無駄な空の...
-
取引先からの改姓挨拶メールに...
-
outlookで返信すると元のメール...
-
LINEで文章の最後にWをつける人...
-
アウトルック2016 受信メールが...
-
Outlookの開封確認メッセージを...
-
QRコードをメールの署名に張...
-
OCNメール 開封通知を受けたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【powershell】cdできないディ...
-
JISコードについて
-
データ本体(exe、jpeg、iso)に...
-
SDに保存したメールがパソコン...
-
エクセルの文字入力
-
揵
-
JIS X 0201の7ビットと8ビット...
-
Yahooメールの絵文字の挿入は一...
-
MSN Hotmail :差出人名(自分...
-
ヤフオクでの文字化け
-
文字化けしたメモ帳(暗号勝負...
-
アンダーバーの入力
-
JavaMail特殊文字付本文が文字...
-
アンダーバーではなく上につい...
-
FACEBOOKの文字化け
-
Windows98英語版を日本語版に(...
-
Mail 文字化け
-
%BE%A4%8Bみたいな記号
-
eメールでの半角カナ
-
gooの検索バーにある入力欄にお...
おすすめ情報