仕組み解説公開日 読了目安 約8分

メールの件名が文字化けする原因と直し方|=?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 / QBは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. 1

    文字コードはUTF-8にそろえる

    いまのメールソフトやスマホはUTF-8で問題なく読めます。件名・本文・添付ファイル名の文字コードをUTF-8にそろえ、ヘッダーにcharset=UTF-8を必ず書きます。

  2. 2

    機種依存文字や絵文字に気をつける

    相手がISO-2022-JPで受け取る古い環境だと、「①」「㈱」「髙」などや絵文字が「?」や「〓」になることがあります。社外向けの定型文では「(1)」「(株)」のように書き換えておくと安全です。

  3. 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を書きます。古い環境に送る可能性があるときは、①や㈱などの機種依存文字や絵文字を避け、自分あてにテスト送信して確認します。

この記事で紹介したツール

あわせて読みたい

仕組み解説約8分

%E3%81%82・\u3042・\343の読み方|URL・JSON・gitで日本語が符号になる理由

URLをコピーしたら「%E6%96%87%E5%AD%97」、APIの返り値を見たら「\u6587\u5b57」、gitのファイル名が「\346\226\207」。どれも文字化けに見えますが、日本語が壊れたのではなく、日本語のバイトや番号を英数字で書き表した「符号」のまま見えている状態です。この記事では、よく見る9種類の書き方の見分け方と読み方、どこで出てくるのか、表示を日本語にする設定をまとめます。

記事を読む →
仕組み解説約8分

「�」「?」の文字化けは戻せる?|欠けた文字の復元と、戻せない文字化けの見分け方

文字化けした文に「�」(黒いひし形に?)が交じっていると、もう戻せないと思いがちです。実は「�」の所で失われたのは多くの場合1バイトだけで、文字コードの決まりと前後の文脈から、元の文字をかなりの確率で推測できます。一方、「?」や「・」に置き換わって保存されたもの、「�」ばかりの文字化けは戻せません。この記事では、「�」が出る理由と推測で補える仕組み、戻せる・戻せないの見分け方、文字化けを悪化させない注意点をまとめます。

記事を読む →
仕組み解説約8分

文字化けのパターン早見表|縺・ã・‚ƒ・$B から原因の文字コードを見分ける

「縺薙s縺ォ縺。縺ッ」「日本語」「‚±‚ñ‚É‚¿‚Í」のような文字化けは、でたらめに見えて実は規則どおりに化けています。最初に出てくる文字を見れば、どの文字コードをどれと取り違えたのかがほぼ分かります。この記事では、よく見る化け方7通りを例つきの早見表にまとめ、それぞれが起きる理由と、戻せる化け方・戻せない化け方の見分け方を説明します。

記事を読む →