絵文字のキャリア間相互変換機能を実装しました
概要
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" といったところです。その理由は以下に挙げる通りです。パッチや動作確認情報、ご意見等を歓迎します。
- 実機検証はAuでのみ行いました。
- Jpmobile→携帯: DoCoMo、SoftBankはシミュレータで変換後の絵文字が表示されることを確認しました。
- 携帯→Jpmobile: DoCoMo、SoftBankはシミュレータから絵文字を送信する方法がわからなかったため検証できていません。
- 実用のためにはより精度(網羅性)の高い変換テーブルを作成する必要がありそうです。
- 変換テーブルに該当がない場合、現状では変換を行わずに放置しています。しかし、これでは携帯電話ユーザに意味不明の文字列を見せてしまうことになります。この点も対処が必要です。
- Willcomにはまだ対応していません。
少しずつ改善していければと考えています。
参考にしたサイト
絵文字の文字コード取得は
を参考にしました。
また、キャリア間の変換テーブルは
を元に生成しています。
有益な情報を公開してくださってありがとうございます。
各キャリアのサイト
も、もちろん参考にしました。もう少し機械可読性の高い状態で公開されていると助かるのですが・・・。