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を書くしかないかなあ・・・。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: 文字が化ける

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1177

コメントする

このブログ記事について

このページは、falseが2007年5月19日 23:35に書いたブログ記事です。

ひとつ前のブログ記事は「スクラッチパッドの作成に失敗しました。」です。

次のブログ記事は「文字化けの続き」です。

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

広告

Powered by Movable Type 6.1.1