メールの件名が文字化けする原因と直し方|=?UTF-8?B?・=?ISO-2022-JP?B?・$Bの読み方
受け取ったメールの件名が「=?UTF-8?B?5paH5a2X…?=」のような英数字になっていたり、本文が「$BL@F|$N…(B」になっていたりすることがあります。これはメールで日本語を送るための決まった書き方が、そのまま見えている状態です。この記事では、件名の=?…?=の仕組み、B方式とQ方式の違い、JISメールの$B、本文の文字化けの原因と、送る側でできる対策をまとめます。
件名の=?UTF-8?B?…?=は「日本語を英数字に包んだ形」
メールのヘッダー(件名・差出人など)は、もともと英数字しか通さない決まりで作られています。そこで日本語の件名は、文字コードと変換方法を書き添えたうえで英数字に置き換えて送ります。これがMIMEエンコード(RFC 2047)で、次の形をしています。
| 部分 | 例 | 意味 |
|---|---|---|
| =? | =? | ここから包んだ文字が始まる |
| 文字コード | UTF-8 / ISO-2022-JP | 中身の日本語の文字コード |
| 変換方法 | B / Q | BはBase64、QはQuoted-Printable |
| 中身 | 5piO5pel44Gu… | 日本語のバイトを英数字にしたもの |
| ?= | ?= | ここで終わり |
たとえば「=?UTF-8?B?5piO5pel44Gu5Lya6K2w44Gu6LOH5paZ44KS6YCB44KK44G+44GZ?=」は、UTF-8の「明日の会議の資料を送ります」をBase64にしたものです。メールソフトはふつうこれを自動で日本語に戻して表示しますが、スマホの通知、メールのログ、Webフォームから届いた通知メール、プログラムで取り出した件名などでは、包んだ形のまま見えることがあります。
B方式とQ方式、ISO-2022-JPの件名の読み方
- B方式(Base64):=?UTF-8?B?5paH5a2X5YyW44GR?= → 「文字化け」。日本語の件名はほとんどこちら
- Q方式(Quoted-Printable):=?UTF-8?Q?=E6=96=87=E5=AD=97?= → 「文字」。=のあとの2桁が1バイト。英語が多い件名で使われる
- ISO-2022-JP(JIS):=?ISO-2022-JP?B?GyRCTEBGfCROMnE1RCROO3FOQSRyGyhC?= → 「明日の会議の資料を」。日本のメールソフトで昔から使われてきた形
長い件名は、1行が長くなりすぎないように、いくつかの=?…?=に分けて改行されます。たとえば「明日の会議の資料を送ります」をISO-2022-JPで送ると、「=?ISO-2022-JP?B?GyRCTEBGfCROMnE1RCROO3FOQSRyGyhC?=」と「=?ISO-2022-JP?B?GyRCQXckaiReJDkbKEI=?=」の2つに分かれることがあります。分かれた部分のあいだの空白や改行は、決まりにより取り除いてつなげます。
本文が「$BL@F|$N…(B」になるのはESCが抜けたJIS
ISO-2022-JPは、ESCという目に見えない制御文字で「ここから日本語」「ここから英数字」を切り替える文字コードです。「ESC $ B」で日本語が始まり、「ESC ( B」で英数字に戻ります。メールをテキストとしてコピーしたり、別のシステムに取り込んだりしたときにESCだけが落ちると、「$BL@F|$N2q5D$N;qNA$rAw$j$^$9(B」のように切り替えの合図と中身が英数字のまま見えます。
この形は「$B」と「(B」の間の英数字を2文字で1文字として読めば元に戻ります。上の例は「明日の会議の資料を送ります」です。ESCを補って読み直すだけなので、文字が欠けることはありません。
本文が縺・ã・‚になるときの原因
本文の文字化けは、メールのヘッダーにある「Content-Type: text/plain; charset=…」の指定と、本文の実際の文字コードが食い違っているときに起きます。本文がUTF-8なのにcharsetがShift_JISと書かれていれば「縺」「繧」だらけになり、charsetの指定がなく受け取る側が西欧の文字コードで読めば「ã」「æ」が並びます。
- Webフォームの自動返信やシステムの通知メールで、プログラムがcharsetを書き忘れている
- Shift_JISで書いたテンプレートを、UTF-8のメール送信プログラムで送っている
- メーリングリストや転送の途中で、本文の文字コードだけが変換された
- 本文がBase64やQuoted-Printable(=E3=81=82の形)のまま見えている。これは化けではなく包んだ形のまま
メールソフトによっては、表示の文字コードを手動で切り替えられます(「表示」メニューの文字エンコーディングの項目など)。切り替えられない場合は、化けた本文をコピーしてツールに貼り付ければ、どの取り違えかを調べて戻します。化け方の見分け方は文字化けのパターン早見表にまとめています。
送る側でできる文字化け対策
- 1
文字コードはUTF-8にそろえる
いまのメールソフトやスマホはUTF-8で問題なく読めます。件名・本文・添付ファイル名の文字コードをUTF-8にそろえ、ヘッダーにcharset=UTF-8を必ず書きます。
- 2
機種依存文字や絵文字に気をつける
相手がISO-2022-JPで受け取る古い環境だと、「①」「㈱」「髙」などや絵文字が「?」や「〓」になることがあります。社外向けの定型文では「(1)」「(株)」のように書き換えておくと安全です。
- 3
自分あてにテスト送信する
システムからの通知メールは、Gmail・Outlook・スマホのメールアプリなど複数の環境で件名と本文を確認します。件名が=?…?=のまま見えるときは、送信側でエンコードの書き方が崩れている可能性があります。
メールに添付したCSVがExcelで化けるという問い合わせも多くあります。これはメールではなくファイルの文字コードの問題で、CSVがExcelで文字化けするときの直し方で対策を説明しています。
よくある質問
- メールの件名に=?UTF-8?B?と表示されるのはなぜですか?
- 日本語の件名を英数字に包んで送る決まり(MIMEエンコード)の形が、そのまま見えているためです。メールソフト以外の通知やログでは自動で戻されないことがあります。=?と?=の間はBase64なので、UTF-8として読めば日本語に戻ります。
- =?ISO-2022-JP?B?の件名はどうやってデコードしますか?
- Base64を外したあと、ISO-2022-JP(JIS)として読みます。Base64だけ外すとESCの交じった英数字になります。長い件名は複数の=?…?=に分かれているので、間の空白や改行を取り除いてまとめて読みます。
- メール本文が$Bや(Bの交じった英数字になります。
- ISO-2022-JPで書かれた日本語から、切り替えの合図であるESCが抜け落ちた状態です。「$B」と「(B」の間の英数字を2文字で1文字として読めば元に戻せます。
- 相手に届いたメールが文字化けしないようにするには?
- 件名・本文の文字コードをUTF-8にそろえ、ヘッダーにcharset=UTF-8を書きます。古い環境に送る可能性があるときは、①や㈱などの機種依存文字や絵文字を避け、自分あてにテスト送信して確認します。
この記事で紹介したツール
あわせて読みたい
%E3%81%82・\u3042・\343の読み方|URL・JSON・gitで日本語が符号になる理由
URLをコピーしたら「%E6%96%87%E5%AD%97」、APIの返り値を見たら「\u6587\u5b57」、gitのファイル名が「\346\226\207」。どれも文字化けに見えますが、日本語が壊れたのではなく、日本語のバイトや番号を英数字で書き表した「符号」のまま見えている状態です。この記事では、よく見る9種類の書き方の見分け方と読み方、どこで出てくるのか、表示を日本語にする設定をまとめます。
記事を読む →「�」「?」の文字化けは戻せる?|欠けた文字の復元と、戻せない文字化けの見分け方
文字化けした文に「�」(黒いひし形に?)が交じっていると、もう戻せないと思いがちです。実は「�」の所で失われたのは多くの場合1バイトだけで、文字コードの決まりと前後の文脈から、元の文字をかなりの確率で推測できます。一方、「?」や「・」に置き換わって保存されたもの、「�」ばかりの文字化けは戻せません。この記事では、「�」が出る理由と推測で補える仕組み、戻せる・戻せないの見分け方、文字化けを悪化させない注意点をまとめます。
記事を読む →文字化けのパターン早見表|縺・ã・‚ƒ・$B から原因の文字コードを見分ける
「縺薙s縺ォ縺。縺ッ」「日本語」「‚±‚ñ‚É‚¿‚Í」のような文字化けは、でたらめに見えて実は規則どおりに化けています。最初に出てくる文字を見れば、どの文字コードをどれと取り違えたのかがほぼ分かります。この記事では、よく見る化け方7通りを例つきの早見表にまとめ、それぞれが起きる理由と、戻せる化け方・戻せない化け方の見分け方を説明します。
記事を読む →