電子メールと日本語

はじめに

電子メール関連のプログラムを開発してると文字化けで結構ハマるので、電子メールと日本語の関連について調べてみました。

前提知識

電子メールと日本語の話の前に、以下の点を抑えておくと理解しやすいです。

文字コードとビット数

文字コードにより、文字を表現するためのビット単位が異なります。たとえば

  • 7ビット単位 -> ASCII, ISO-2022-JP
  • 8ビット単位 -> UTF-8, Shift_JIS, EUC-JP
  • 16ビット単位 -> UTF-16

といった具合です。

メールデータの構造

メールデータの実態は単なるテキストで、その構造は以下の通り単純なものです。

  • ヘッダ -> From, To, Subject .. etc
  • 改行 -> ヘッダと本文の区切り
  • 本文 -> 拝啓○○様 …

前提知識はこんなところで、以降本題にはいります。

初期の電子メールと日本語

初期の電子メールはASCIIを用いて符号化する前提(7ビット単位が前提)でした。そのため英語しか電子メールに使えませんでした。

この制約の中で日本語を表現するために、ISO-2022-JPという7ビット単位の文字コードが誕生しました。ISO-2022-JPはASCIIと同じコード範囲のみを使います。

ISO-2022-JPによりASCII(7ビット単位)を前提としていた電子メールの枠組みの中で、日本語を扱えるようになりました。

MIMEの登場と日本語

電子メールが普及するにつれ、多言語を扱う仕組みが必要になりました。そこでMIME(Multipurpose Internet Mail Extensions)という規格が制定されました。

MIMEの登場により7ビット単位以外の文字コード(UTF-8, Shif_JIS, EUC-JP…etc)が電子メールに利用できるようになりました。

MIMEの有無でメールヘッダには以下のような違いがあります。

メールデータの構造(ヘッダ)

(メールヘッダでは他にもBCCとかいろいろ記載できるパラメータありますが、MIME有無の比較のため必要最低限のものだけ記載)

MIMEなし

Date:     26 Aug 76 1429 EDT
From:     Jones@Registry.Org
To:       Smith@Registry.Org

MIMEあり

Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date:     26 Aug 76 1429 EDT
From:     Jones@Registry.Org
To:       Smith@Registry.Org

 

MIMEによってできるようになったこと

メール本文の文字コード指定

Content-Type: … charsetでメール本文のエンコーディングを指定できるようになりました。

メールヘッダの文字コード指定

メールヘッダのFromやToやSubjectの文字コードを指定できるようになりました。Q符号化/B符号化によって実現します。ちょっと長くなってきたので説明を割愛。

7ビット単位以外の符号化方式のサポート

8ビット単位の符号化方式(ex.Shift_JIS)を解釈できるようにテキストの符号化方式を指定できるようになりました。Content-Transfer-Encodingに符号化方式を指定します。指定できる方式は、以下の通りです。

  • 7bit
  • 8bit
  • base64
  • quoted-printable

(ここで指定する符号化方式は「文字」の符号化方式ではなく、「バイト列」の符号化方式。8ビット単位のデータをASCIIで表現するために)

まとめ

ASCIIを前提として始まった電子メールですが、このようにISO-2022-JP -> MIMEと変遷を経て、今日日本語メールを送受信できるようになっているという歴史がありました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA