auとSoftBankのiPhoneにおける絵文字対応を比較する

  • Unicode絵文字を他のキャリアの絵文字に変換する際、auゲートウェイUnicodeの絵文字テーブル(EmojiSources.txt)をベースとした表を用いる。このため、au絵文字にない文字であっても変換することができる。一方、SoftBankの他社向け変換はSoftBankのSift_JIS経由であるため、SoftBank絵文字にない文字には対応できない。SoftBank iPhone発のメッセージがSoftBank絵文字以外の絵文字を含んでいる場合、charset=UTF-8で送信され、ゲートウェイはそれをスルーする。その結果、たとえば(iモード絵文字にあってSoftBank絵文字にない)カタツムリの絵文字をSoftBank iPhoneからdocomoのケータイに送っても、正しく表示されない。また、メッセージ全体がcharset=UTF-8になるため、一緒に送った絵文字もすべて「・」に化けてしまう*2


  • EmojiSources.txtはフォールバックを定義していない。しかし、auゲートウェイは従来と同様、「似た絵文字」による代替をサポートしている。たとえば「熱帯魚」の絵文字をdocomoに送るときには、「魚」の絵文字に変換する。要するに、EmojiSources.txtに従来の変換テーブルのフォールバック分を足したようなかんじだ。


  • auの他社向け変換テーブルは、以前からテキストによるフォールバックを多用し、「〓」は使わない。一方、SoftBankの他社向け変換テーブルは、テキストによるフォールバックはあまり使わず、主に「〓」を用いる。すでに述べたようにauゲートウェイUnicodeベースの変換テーブルを採用しているが、フォールバック用のテキストは従来の「auケータイ→他社ケータイ」のものをベースとしている。たとえば、iPhoneAppleカラー絵文字)のU+1F41B BUGは毛虫だが、これをau iPhoneからdocomoに送ると[ゲジゲジ]と表示される。このあたりは変えたほうがよかったのではないかという気もするが、どうなのだろう。


  • 他社向けの変換では「〓」は使わないauだが、「au iPhoneauケータイ」では「〓」が出現する。たとえばau iPhoneからauケータイに送ったハムスターの絵文字は、[ハムスター]ではなく「〓」になる。たぶん送信側ゲートウェイ(他社向け変換)と受信側ゲートウェイ(自社向け変換)でテーブルが違っているのだろうが、ちょっと不思議な気もする。


  • auゲートウェイは、送信側だけでなく、受信したUnicode絵文字の変換にも対応した。これにより、(iPhoneだけでなく)auのケータイにもUTF-8Unicode絵文字を送れるようになった。docomoのケータイでは表示できなかったUTF-8のカタツムリも、auのケータイなら表示できる。


  • au iPhoneSoftBank iPhoneでは、利用するテーブルの違いにより、変換結果が違ってくることがある。たとえばiPhoneのアリ星人は、au iPhoneから(Unicodeテーブル経由で)auケータイに送るとUFOになり、SoftBank iPhoneから(SoftBankテーブル経由で)auケータイに送るとタコ星人になる。また、SoftBank iPhoneからアリ星人を送った場合でも、(他の文字の影響で)charset=UTF-8であれば、(受信側のauゲートウェイUnicodeテーブルで変換するので)UFOになる。


  • 以上の内容をまとめたのが、下図。△印はフォールバック。赤矢印はcharset=UTF-8。×印は受信側が文字を持っているのにそれを表示できない例。SoftBankの空欄は、意味合いとしてはdocomoの「・」と同じ。


  • というわけで、意外にややこしい話になってしまったが、大ざっぱに言えば、au iPhoneの絵文字サポートはうまくいっている(この面ではSoftBank iPhoneを抜いた)と思う。

*1:akane_nekoさん、works014さんにご協力いただいてテストしました。ありがとうございます!

*2:受信側のdocomoゲートウェイUnicode絵文字に対応していない。