絵文字のキャリア間相互変換機能を実装しました


概要

Jpmobile trunk に DoCoMo、Au、SoftBankの絵文字を透過的に扱うためのコードをcommitしました(Revision 89)。

コントローラに

class MyController
  mobile_filter
end

と指定することで有効になります。

機能のイメージは テストコード をご覧いただけるとわかりやすいかもしれません。

実現の方針

Jpmobileでは、各キャリアの絵文字をUnicode私的領域上にマッピングして管理します。このとき、DoCoMo、Auは公式のマッピング(お客様のお探しのページが見つかりません-404 Not Found | NTTドコモ および KDDI au: 技術情報 > 絵文字)を使用します。ただしSoftBankはAuとの重複を避けるため、公式のマッピング(no title)に0x1000加算しU+F001以降に割り当ます(日本語処理・携帯絵文字処理関係のperlモジュール の EmojiTrans.pm と同様)。テンプレート内ではUTF-8でエンコードするか、数値文字参照の&#xHHHH;形式で指定します。

絵文字は送出時に内蔵の変換表に基づいて変換され、携帯電話のエンコーディングにあわせて(DoCoMo、Au、SoftBank 2GではShift_JIS、SoftBank 3GではUTF-8で)送出されます。また、携帯電話から受信した絵文字はUTF-8でparamsに渡されます(このときはキャリア間での変換は行われません。携帯電話から送られた絵文字情報はキャリア依存の情報を失うことなく保存されます)。

Mobile On Railsとの比較

Mobile On Railsでは既に絵文字処理が実現されています。Mobile On Railsでは独自に定義した内部エンコーディング(__AU_XXXX__など)を使用しています。一方、Jpmobileでは、内部ではUnicodeを使用し(DoCoMo、Auはキャリアの仕様通り、SoftBankはシフトしたマッピングを使用)、UTF-8文字列としてそのまま絵文字を格納します。

課題

残念ながら未だ完成度は "Experimental" といったところです。その理由は以下に挙げる通りです。パッチや動作確認情報、ご意見等を歓迎します。

少しずつ改善していければと考えています。

参考にしたサイト

絵文字の文字コード取得は

3 日坊主日記 - 絵文字コード変換機生成機

を参考にしました。

また、キャリア間の変換テーブルは

no title

を元に生成しています。

有益な情報を公開してくださってありがとうございます。

各キャリアのサイト

も、もちろん参考にしました。もう少し機械可読性の高い状態で公開されていると助かるのですが・・・。