久しぶりにJavaしている今日この頃です(9) 絵文字とかガラパゴスなものはさっさと消えてくれないかな〜

iPhone欲しいよね〜、っというわけで、今週は絵文字対応のライブラリを作っていたわけですが(・ω・)
週後半は別タスクを入れられてしまったので、めずらしく残業もしてみたりして(#゚Д゚)
あと、あまり複雑なテストはしていないので、それは人にお願いする予定(・∀・)ノシ*1


で、仕様としてはこんなところにしてみたわけですが(・ω・)

MobilePictogramConverterEmf(Servlet絵文字フィルター)で出来ることを参考にして。
要するに、Unicodeの私的領域を使ってシームレスに絵文字と扱うのと、キャリア間の相互変換を実装したかったと言うことですにょ(・ω・)


私的領域へのマッピングは、DoCoMoSoftbankは仕様通りで、auに関してはいわゆる裏Unicode領域を使って衝突しないように作成。
まあ、各キャリアのShift-JIS、UTF-8Unicode変換テーブルとキャリア間の相互変換テーブルは外出しのファイルなので、そこを弄れば良いだけなんですが。
結局、このテーブル変換が主な処理なので、絵文字基本クラスでほとんどの処理を実装。
Concreteな各キャリア絵文字クラスでは、Unicode文字参照を作ったり、<img localsrc/>を吐いたりするだけのものになりまスタ。*2


で、今回一番はまったのは、入力パラメータを取得する際の文字コードの問題だったりして(´・ω・`)
普通にJavaでWebアプリを作る時は、HttpServletRequest.setCharacterEncoding()で使う文字コードを指定しておけば良いわけですが。
今回は、出力するHTMLをPCとSoftbankUTF-8DoCoMoauはShift-JIS(Windows-31J)とか、キャリア毎に文字コードを変えて、混在できるようにしようとしたらちょっと面倒な事に(´・ω・`)
結局、最初に仮でsetCharacterEncoding("ISO-8859-1")しておいて、HttpServletRequestWrapper派生のgetParameterValues()の所でnew String(org.getBytes("ISO-8859-1"), encoding)することで対応してみたわけですが。*3


で、今回はJava用に適当な絵文字処理ライブラリが見つからなかったので、自前で用意してみたわけですが。
携帯サイトの作成なんかはやっぱり、PHPPerlが主流ってことですかね(・ω・)?

*1:UnitTestでの変換チェックと、DoCoMoSoftbankを使っての単純なチェックだけしかやってませんノダ

*2:Softbank絵文字クラスはWebコード用の処理が入ってるけど(・ω・)

*3:ちなみにJSPUTF-8で統一して作って、出力する時にsetContentType()なかんじで。