jpmobileを使って、au/softbankでも、controller内で、ドコモ絵文字にマッピング済みのutf8値を得る方法
非常にわかりにくいタイトルですが、
ユーザがテキストフォームに絵文字を入れて送ってきたときの話しです。
以下のようなコードがあった際に、
class HogeController < ApplicationController mobile_filter def hoge # 例えば、ドコモの「晴れ」に対応する絵文字は、jpmobileの # before_filterを通った、actionの時点で、 # docomo : \xEE\x98\xBE # au : \xEE\x92\x88 # softbank : \xEF\x81\x8A # となっている end end
そのままhogeアクションのviewで表示するなら、jpmobileのafter_filterがかかって、
docomo : \xF8\x9F (sjis)
au : \xF8\x9F (sjis)
softbank : \xEE\x98\xBE (utf8)
になるのですが、hogeアクションの中で、au/softbankでもdocomoの値を手に入れるにはどうしたらよいでしょうか。
一応、下記の方法で手に入れることが出来たので、メモっておきます。
class HogeController < ApplicationController mobile_filter def hoge # strが変換したい文字列とすると str = Jpmobile::Emoticon::utf8_to_unicodecr(str) str = Jpmobile::Emoticon::unicodecr_to_external(str, Jpmobile::Emoticon::CONVERSION_TABLE_TO_DOCOMO, false) # これで strは # docomo : \xEE\x98\xBE # au : \xEE\x98\xBE # softbank : \xEE\x98\xBE # となります end end
単純に、jpmobileのafter_filterをかけているだけですが、
unicodecr_to_externalの3つ目の引数をfalseにしてutf8-->sjis変換を行なわないようにしています