開発者向け情報: 絵文字

京ぽんの絵文字

京ぽんでは,

  • ウィルコムの絵文字
  • Web入力用絵文字

の2種類が扱える。後者は,実質的にDocomo (iモード) の絵文字。

Web入力用絵文字

Googleが日本の携帯電話キャリアで使用される絵文字を符号化するユーティリティemoji4unicodeを公開している。 Docomoの絵文字ユニコードに変換するにはこのツールが使えるかもしれない。 並行してGoogleは絵文字をユニコードに追加するためのユニコードコンソーシアムへの提言文書を作成しているらしい。そのプロジェクトの情報 The UTC Subcommittee on Encoding of Symbols >Emoji Symbols も参考になるかもしれない。

ウィルコムの絵文字

残念ながら,ウィルコムの絵文字はGoogleのemoji4unicodeでは完全に無視されているようだ。ただし,ウィルコムの絵文字は163文字と他のキャリアに比べれば多くないので,時間と労力があれば,手動でユニコードの適当な文字とマッピング可能かもしれない。 WILLCOM | ウィルコムの電話機向けホームページの作成方法 「3. リファレンス編」30ページに絵文字のShift-JISコード表がある。

Cocoaアプリケーションで携帯電話の絵文字を扱うには

Cocoaアプリケーションで文字はNSStringオブジェクトとして扱うのが基本であり,NSStringは内部的にはユニコードで表される。 一方,京ぽんの内部のテキストデータはShift-JISベース (メールではISO-2022-JP) だが,絵文字が含まれている場合それは厳密にはShift-JISとは言えずCocoaの- initWithData:encoding:では正常に解釈できない。(CocoaのNSStringは極東のガラパゴスケータイ文化のみで通じる絵文字なんかに一切配慮しない。そもそも絵文字が入ってる時点で厳密にはShift-JISじゃないし)

Cocoaアプリケーションで携帯絵文字を含むデータを扱えるようにするには,

  • NSStringではない独自文字列クラスを作成
  • dataを- initWithData:encoding:に噛ませないで手動でバイト配列を読んで,絵文字部分を画像に変換したNSAttributedStringとして扱う
  • dataを- initWithData:encoding:に噛ませる前に手動でバイト配列を読んで,絵文字部分を対応するユニコードの文字に変換
  • dataを- initWithData:encoding:に噛ませる前に手動でバイト配列を読んで,絵文字部分をゲタ(〓)にするか単純に無視

のいずれか。下に行けば行くほど簡単だが絵文字の情報が失われる。

最初の案は面倒すぎるのでありえない。次の案も画像をいちいち作るのが面倒だしNSAttributedStringはやっぱりちょっと扱いづらい。 ちょうどGoogleのemoji4unicodeが公開されたところだし,3つめあたりが妥当なとこだろうか。