メールを含め,インターネット上のデータの送受信では,つぎのことが起こっている:
- カラダの分解 (送信側)
- ネットを流れる
- カラダの復元 (受信側)
送信側のメールソフトは,「カラダ復元」のための情報をメール本文につけ加える。
受信側はこの情報をもとに,「カラダ復元」の処理をする。
カラダの復元は,失敗することがある。
また,カラダの復元には成功しても,それを開いて読む段階で失敗することがある。
「文字化け」は,このようなときの現象である。
「カラダ復元」情報の実際と,「添付ファイル」の実体 |
メールに「Shift-JIS コードの htmlファイル」を添付した場合を考える。
送信側メールソフトがつくる「カラダ復元」情報は,つぎのようになる。
(メールソフトで, message source を表示させると,これが見られる。)
1. 異なるパート(本文と添付ファイル) で成ることを宣言:
Content-Type: multipart/mixed;
boundary="------------090506090400090804050201"
ここで「boundary="------------090506090400090804050201"」は,つぎの意味:
「各パートの区切りに,つぎの文字列を用いる:
"------------090506090400090804050201" 」
2. つぎのメッセージの後から,本文のパートが始まる:
This is a multi-part message in MIME format.
3. 本文パートの最初で,本文の文字コードが ISO-2022-JP であることを宣言
--------------090506090400090804050201
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
註 : |
メールソフトは,本文の文字コードを判別しない。
メールソフトの設定でユーザが文字コードを ISO-2022-JP に設定しているので,メールソフトはその情報をここに書いているだけ。
|
4. 添付ファイルパートの最初で,添付ファイルのファイルタイプと,エンコード形式を宣言
--------------090506090400090804050201
Content-Type: text/html;
name="index.html"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="index.html"
(html 文書でエンコード形式が base64,と宣言している。)
註 : |
メールソフトは文書のタイプを判別するものではない。
文書のタイプは,ファイルの拡張子「.html」だけから判断している。
また,メールソフトは文字コードを判別するものではない。添付の html ファイルの文字コードは Shift-JIS であるが,上の記述の中に「文字コードは Shift-JIS」と言っている箇所が無いことに注意。
|
この宣言の後に,「添付ファイル」の実体であるところのエンコードされた文字列が,メールソフトによって書かれる。
PGJvZHkgYmdjb2xvcj0iI2ZmZmZmZiI+Cgo8dGFibGUgd2
IGFsaWduPWxlZnQgdmFsaWduPXRvcCB3aWR0aD0iMTUlIj
Z249Y2VudGVyIHdpZHRoPSI3MCUiPjxmb250IHNpemU9Ii
gsmK1oLtgumVto6aibuCrzwvZm9udD48L3RkPgo8dGQgYW
‥‥‥‥
註 : |
文書は,ビットの列。
メールのエンコードは,このビットの列を,アルファベットの文字列に変換する。
「base64」は,この変換方式の一つ。
|
5. 添付ファイルが複数のときは,添付ファイルのそれぞれについて 4 と同様のパートが作成される。
6. 最後に,boundary 文字列を書き,そしてその後ろに「--」をつけて,「これ以上はパートがない (メールはここで終わり)」を示す。
--------------090506090400090804050201--
1. ネットを流れている途中で,データが損なわれた。
今日,これは考えなくてよい。
(ビット落ちの問題は,今日では解決されているとしてよい。)
2. 本文が化けていれば,
メールViewer (POPメールならメールソフト,Webメールなら Webブラウザ) の判別した文字コードが,ISO-2022-JPではない。(Viewer が文字コードの判別に失敗。)
この場合は,Viewer の表示メニューから「文字コード」を選択して,ISO-2022-JP を設定すれば,文字化けが直る。
3. 本文は化けないが,添付ファイルが化ける場合,
対応に必要となる基礎知識:
1. |
| 添付ファイル文書は,送信側のメールソフトで,アルファベット文字列にエンコードされている。エンコード方式は base64。
受信側メールソフトは,これをそっくり受信する。
message source を表示させて,どんなふうに受信されているかを見てみよう。
本文に続いてアルファベットの塊があるが,これが復元される前の文書。
|
|
2. |
| メールソフトは,ユーザから「文書復元」のリクエストがきたときに,「base64 でアルファベット文字列をデコードする」という形で文書を復元する。
ユーザからの「文書復元」のリクエストは,ユーザが添付ファイルを開こうとしたときに発生する。
ユーザが添付ファイルを開こうとすると,メールソフトはつぎの選択肢を聞いてくる:
(1) デフォルト・アプリケーションで開く
(2) ファイルとして保存する
(1) を選択したとき,文書ファイルが cache フォルダの中に復元されて,これがデフォルト・アプリケーションで開かれる。
(メールソフトでは,「このタイプの文書はこのアプリケーションで開く」というデフォルト・アプリケーションが設定されている。)
(2) を選択したとき,保存先として指定した場所に文書ファイルが復元される。
|
「添付ファイルが化ける」には,つぎの2通りがある:
- 復元そのものが失敗している。
- 復元は成功しているが,文書を開いて読むのに失敗している。
A. 復元そのものに失敗していると見込まれる場合は,
メールソフトを定評のあるものに変更する。
POPメールならメールソフトを Thunderbird にする,
Webメールなら Webブラウザを Firefox にする,とか。
但し,ソフトの「環境設定」で,文字コードの設定を適切に行うことが必要。
B.「復元は成功しているが,文書を開いて読むのに失敗する」には,
つぎの2通りがある:
- 文書を開くアプリケーションに問題がある。
- 文書を開いて読めるアプリケーションで開いているが,アプリケーションが当て込んでいる文字コードが文書の文字コードと違っている。(アプリケーションが文字コードの判別に失敗。)
添付ファイルが html のときは Webブラウザでこれを開いて読むことになる。
Webブラウザは,文字コードを当て込む。
これが外れると,文字化けになる。
──このときは,Webブラウザに文字コードを直接教えてやる。
(「View」メニューの「Character Encoding」で指定)
註1 : |
メールサーバは,文字コードの処理をしていない。
したがって,文字化けの原因から外してよい。
|
2 : |
ウェブメール──例えば,サイボーズ──での文字化けについては,つぎの2つのそれぞれを疑うことになる:
- サイボーズが行う文書復元
- ウェブブラウザが行う文字コード判別
|
|