MIME の文字コードと転送方式を読む
メール本文の Content-Type は、UTF-8 などの charset を指定した text/plain を宣言できます。Content-Transfer-Encoding には quoted-printable または base64 を指定できます。前者のラベルはバイトを文字に解釈する方法、後者は転送中にそのバイトをどう表すかを示します。どちらか片方のラベルだけではテキストを完全には説明できません。Quoted-Printable は印字可能な ASCII 文字の多くを読めるまま残し、一部のバイトを等号と2桁の16進数で表します。Base64 は代わりにバイトの組を限られた文字種にエンコードします。どちらも元に戻せる表現であり、秘匿や認証ではありません。
アクセント付き文字の例を確かめる
テキスト Café を例にします。UTF-8 では最後の é は C3 A9 というバイトになります。Quoted-Printable 表記には =C3=A9 が含まれるため、主に ASCII から成る短い文なら見た目の読みやすさが残ります。埋め込みツールでは「コーヒーと紅茶」でこの経路を示します。Base64 の表記は元の文にずっと似ていませんが、バイトをデコードして UTF-8 で解釈すれば同じ文字に戻ります。それぞれ対応するデコーダーで比較し、すべての等号に同じ意味があると思わず、正確な出力を確認してください。Base64 でも等号をパディングに使う場合があります。 埋め込みコンバーターの例: 入力 コーヒーと紅茶、結果 =E3=82=B3=E3=83=BC=E3=83=92=E3=83=BC=E3=81=A8=E7=B4=85=E8=8C=B6。
- Café の é → UTF-8 バイト C3 A9
- Quoted-Printable:=C3=A9
- Base64:別の印字可能な表現
行の折り返しも確認する
MIME の Quoted-Printable には行の長さ、途中で折り返すためのソフト改行、行末の空白について規則があります。符号化された行の末尾に等号を置くと、次の行へ同じデータが続くことを示します。MIME の Base64 にも本文の行長に関する規則があります。ブラウザー内の変換器はバイト表現を確かめるのに役立ちますが、実際のメール送信システムでは MIME 全体の規則に従い、ヘッダーを一貫して設定し、意図しない再エンコードを避ける必要があります。転送エンコードされた本文をそのまま HTML ページに貼れば、意図した文字ではなく符号化表現が表示されます。受け取り側で正しい順序で復号してください。
各方式が役立つ場面
本文の大部分が ASCII で、ASCII 以外のバイトが時々現れるメールでは、quoted-printable なら大部分を人が読んで確認できます。印字可能な ASCII 以外のバイトが多ければ Base64 が適する場合もありますが、結果は長くなり、見ただけでは内容を読み取りにくくなります。一つのサンプルだけで長さを比べず、内容と受信側の方式に合わせて選んでください。メールの件名などのヘッダーには追加のエンコード構文があり、本文の quoted-printable と同じようには扱えません。
順を追って文字化けを調べる
メールに「Caf=C3=A9」と表示されたら、まず転送エンコーディングがデコードされたか確認します。デコード後に代替文字が現れるなら、宣言された charset と実際のバイト列を調べます。二重エンコードされた文字列が出るなら、見た目が直るまで無闇にデコーダーを重ねるのではなく、どのシステムが2回エンコードしたかを特定してください。再現可能なテストのため、元の UTF-8 の試料、MIME ラベル、両方式のエンコード例を残します。MultiVerto のツールは入力テキストの変換を示すもので、完全なメールメッセージを組み立てたり検証したりはしません。