iTwitterMobile0.2.1を公開して、次の0.3に取り掛かっています。
最初に携帯から送る時に「~」が化ける問題をなんとかしようと思いましたが、なかなか根が深いです。
現在の実装としては、以下のようになっています。
で、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を書くしかないかなあ・・・。
最初に携帯から送る時に「~」が化ける問題をなんとかしようと思いましたが、なかなか根が深いです。
現在の実装としては、以下のようになっています。
- テキストボックスに入力された文字列をStringで取得。
- 文字列をcom.nttdocomo.net.URLEncoder.encode()でx-www-form-urlencoded 形式の文字列に変換。
- サーバに送信
- サーバ側で、phpのmb_convert_encoding()で自動判別してutf-8に変換。
- phpのhtmlspecialchars()を通して、twitterのサーバに送信
で、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を書くしかないかなあ・・・。
カテゴリ
Javaトラックバック(0)
このブログ記事を参照しているブログ一覧: 文字が化ける
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1177
コメントする