2007年5月19日アーカイブ

iTwitterMobile0.2.1を公開して、次の0.3に取り掛かっています。
最初に携帯から送る時に「~」が化ける問題をなんとかしようと思いましたが、なかなか根が深いです。
現在の実装としては、以下のようになっています。
  1. テキストボックスに入力された文字列をStringで取得。
  2. 文字列をcom.nttdocomo.net.URLEncoder.encode()でx-www-form-urlencoded 形式の文字列に変換。
  3. サーバに送信
  4. サーバ側で、phpのmb_convert_encoding()で自動判別してutf-8に変換。
  5. phpのhtmlspecialchars()を通して、twitterのサーバに送信
曲者なのがcom.nttdocomo.net.URLEncoder.encode()で、APIリファレンスによると「文字列を URL エンコード形式の文字列に変換します。 Unicode 文字列をデフォルトエンコーディングの文字列に変換した後、 x-www-form-urlencoded 形式の文字列にエンコードします。」とあります。
で、DoJaのエミュレータの場合、Windowsで動いているので、Javaの内部形式からWindows-31Jに変換されてx-www-form-urlencoded 形式になります。
phpのmb_convert_encoding()の自動判別は、windows-31jではなくsjisとして解釈するので、ここで「~」が化けます。
なので、とりあえずサーバ側を自動判別でなく、sjis-win(mb_convert_encodingでのwindows-31jのことらしい)でやってみたら、エミュレータでは問題なく「~」が投稿できるようになりました。
で、さっそくと実機(SO903i)でやってみたら、今までどおり化けてくれます。
追試してみたところ、com.nttdocomo.net.URLEncoder.encode()を呼んだ段階で「~」が「?」に化けているようです。
えぇぇぇ~!って感じです。普通にキーから入力した文字が「デフォルトエンコーディングの文字列に変換」で化けちゃうってどう言うこと?WAVE_DASHがFULLWIDTH TILDEに化けるとかならわかるけど、?になるって・・・。
今のところ、com.nttdocomo.net.URLEncoder.encode()が悪いのかSO903iの実装が悪いのかわかりませんが、とにかく今のやり方では「~」が使えません。

ん~、utf-8でgetBytes()して、自前URLEncoderを書くしかないかなあ・・・。
2007年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

このアーカイブについて

このページには、2007年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年5月17日です。

次のアーカイブは2007年5月24日です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1