iPhone5の絵文字をメールするとどうなる?

自社サービスとして、送信メールのテストツール、OnTargetメールテスターを公開していますが、Outlookのバージョンによって表示が異なる事例を紹介します。また、メールの文字化けの解析方法を紹介します。
なお、第68回PHP勉強会でLTした内容とほぼ同じです。

iPhone5の絵文字をOutlookで見るとどうなる?

iPhone5の絵文字として、メール作成画面で右のように表示されるものを使いました。

ここでメールを作成し、OnTargetメールテスターのアドレス宛てにメールを送信し、表示イメージ取得機能でOutlookシリーズの画像を見てみると、Outlook2013では絵文字も表示されるものの、Outlook2010以前では絵文字部分が表示されません。


Outlook2013と、Outlook2010の該当部分を貼っておきます。




メールのソースを解析する

OnTargetメールテスターのソース表示機能を使って、当該メールのソースを表示し、ヘッダの関連部分と、本文を抜き出したものが下記です。

Content-type: text/plain; charset=utf-8
Content-transfer-encoding: base64
X-Mailer: iPhone Mail (10B146)

44OG44K544OI44Gn44GZ44CCDQrntbXmloflrZfjgILwn5iK

メール本文は、日本語部分(「テストです。絵文字。」という部分)も含めて、謎の文字列のようになっています。これは、ヘッダ部分(Content-typeと、Content-transfer-encoding)に書いてある通り、UTF-8の文字列をbase64でエンコーディングしたものです。
これではなんだか分からないので、まずはbase64をデコードしたものをバイナリ表示(16進数)してみます。
base64のデコードとバイナリ表示は、色々なツールがあると思いますが、自分の場合はUbuntuに入っていたbase64コマンドとodコマンドを使いました。いずれも、GNU coreutilsの中に入っているので、ほとんどのGNU系環境で使えると思います。odコマンドは、octal dumpの略で、もともとは8進数表示するためのものですが、-tオプションで8進数以外のさまざまな表記が指定できます。

$ echo 44OG44K544OI44Gn44GZ44CCDQrntbXmloflrZfjgILwn5iK | base64 -d | od -t x1
0000000 e3 83 86 e3 82 b9 e3 83 88 e3 81 a7 e3 81 99 e3
0000020 80 82 0d 0a e7 b5 b5 e6 96 87 e5 ad 97 e3 80 82
0000040 f0 9f 98 8a
0000044

日本語テキストをUTF-8にすると、ほとんどの文字は16進のex(xは16進1ケタ)から始まる3バイト列になります。この出力結果も、先頭から3バイトずつ区切ると、(e3 83 86) (e3 82 b9) (e3 83 88) ... のようになっているのが分かります。
絵文字はメールの最後につけたので末尾から見て行くと、16進のe台がなかなか見つかりません。UTF-8の仕様を調べると分かるのですが、これは最後の4バイト(f0 9f 98 8a)で1文字を表わしているためです。
どうも、あまり見たことのないUnicode文字として送信されているようです。

Unicodeのコード表で探す

次に、この4バイト列がUnicodeのどのコードポイントに該当するか調べてみましょう。HTMLが分かる人には、「&#で表記したときに何番になるか」と言うと通じるでしょうか。
UTF-8のデコードツールも色々あると思いますが、Web上で探した下記のサイトを使いました。
http://rishida.net/tools/conversion/
UTF-8の欄に"f0 9f 98 8a"と入力して、"Convert"ボタンをクリックすると、色々な変換結果が表示されます。自分としては、UnicodeのU+表現が分かりやすいので、そこを見ると U+1F60A となっています。16進で5ケタなので、16ビットにおさまらない文字です。
次に、このコードポイントが、Unicodeでどう定義されているかを調べます。これには、Unicodeの公式なコード表を見るのが一番確実です。Unicode Consortiumのサイト(下記)にコード表があって、コードポイントによる検索も可能です。
http://www.unicode.org/charts/
ここでさきほどの1F60Aを入力すると、該当する文字が含まれるコード表のPDFが見られます。このPDF(http://www.unicode.org/charts/PDF/U1F600.pdf)を見ると、Emoticonsという分類で、1F60Aは"Smiling Face with Smiling Eyes"となっていることが分かります。
なお、文字コードの仕様として決まっているのは、どの番号にどんな文字があるかだけで、文字の見た目はサンプルです。フォントによって、見た目は大きく異なる可能性があります。

分かったことのまとめ

iPhoneの標準メールソフトの絵文字の表情は、UnicodeのEmoticonとして送信されています。
Outlookシリーズでは、Outlook2013だけがこの表示に対応しているようです。
対応状況をより詳細に調査したい場合には、0x10000以上のUnicode文字全般に対応しているのか、インストールされているフォントによって違いが出るのかなどを調査する必要があると思います。