auブラウザ、いまだにUTF-8が使えず!
携帯ブラウザでは元々Shift_JISしか対応していなかったけど、FOMAサービスが開始された2001年頃からUTF-8対応の端末が徐々に増えてきた。携帯でも(X)HTMLのキャラクタエンコーディングはそろそろUTF-8でいいんじゃないか?
そう思って実験的にコンテンツを表示させて見ると・・・。au端末の挙動が明らかに変だ。
関連記事:
携帯のUTF-8対応状況
3G端末に限って言うと、UTF-8が使える条件は次のようになっている。
機種 | XHTML | HTML | XHTML (SSL) |
HTML (SSL) |
---|---|---|---|---|
docomo 3G | ○ | ○ | ○ | ○ |
au ブラウザver7.2 | ○ | △ | ○ | ○ |
au ブラウザver6.2 | × | △ | × | × |
SoftBank 3G | ○ | ○ | ○ | ○ |
○:文字化けしない △:一部の条件下で文字化け ×:文字化けする
docomoとSoftBankはUTF-8に完全対応できているが、auは最新ブラウザ(バージョン7.2)ですら完全に対応できていない!しかもauはブラウザバージョンやSSLかどうかなどの要因で何やら複雑に変化している。
一体auはどういう動きをしているのか?詳しく調べてみた。
au最新ブラウザはHTMLでGET送信時に文字化け
まずはauブラウザver7.2の状況を見てみる。使用したのは、先日会社で購入した最新機種T004。
用意したのはUTF-8のXHTMLコンテンツ。文字表示とフォーム送信(GET)、フォーム送信(POST)の機能テストが行えるようにページを作成した。XML宣言のencodingをUTF-8とし、Content-Typeヘッダにも「application/xhtml+xml; charset=UTF-8」のようにcharsetパラメータが送信されるようにサーバー設定を行っておいた。
結果は以下の通り。UTF-8でもコンテンツ表示やフォーム送信が正常に動作することが確認できた。
今度はHTMLで同様のテストを行ってみた。XML宣言を外し、Content-Typeヘッダを「text/html; charset=UTF-8」に変更してみると・・・。
何とGET送信したときだけ、文字化けしている!パケットキャプチャでHTTPリクエストを調べてみると、どうやらHTMLでGET送信のときだけShift_JISでフォーム送信してしまうようだ。auのゲートウェイサーバーが影響しているのか、なにやら中途半端な挙動だ。
WAPブラウザ6.2ではXHTMLでUTF-8が使えない
WAPブラウザ6.2の状況は更にヒドイ。W61KでXHTMLを表示した結果は以下の通り。
何とW61Kではフォーム送信はもちろん、文字表示も含めてUTF-8が使えない!
HTMLでのUTF-8表示はそこまではヒドくない。
T004と同様、GET送信だけは文字化けしてしまうものの、文字表示とPOST送信には問題がなかった。
SSLではHTMLが文字化けする場合も
さらにSSLでの結果がHTTPでの結果と異なってくる。まずはT004。
< img border=”0″ alt=”IMGP1714-s” src=”/wp-content/uploads/2010/08/imgp1714-s-thumb.jpg” width=”160″ height=”278″ />
何と、T004ではXHTMLでもHTMLでも完璧にUTF-8が使えるようになった。一方、W61Kは次のような状況だ。
W61KはXHTML・HTML共に全くUTF-8が使えない!T004とは正反対の結果に。
まとめ
auでUTF-8対応の条件が複雑だけど、おそらく次の理由によるものではないだろうか?
- au ブラウザver6.2自体はUTF-8に対応していないため、EZゲートウェイが変換しないコンテンツ(XHTMLコンテンツ及びSSLの場合)は文字化けする
- HTTPでHTMLコンテンツの場合、EZゲートウェイがUTF-8⇒Shift_JISへの変換を行うが、フォームからのGET送信に対応できていないためGET送信時だけ文字化けする
au端末とEZゲートウェイとの役割分担がうまくいっていない感じだ。
結局のところ、携帯の全キャリアでUTF-8を使うことは実質上できない。でも、CMSやフレームワークとかの連携を考えるとやっぱりUTF-8を使えた方がいいし、欲を言えば開発者が場面に応じてShift_JIS・UTF-8を自由に選べる環境が望ましい。いつか改善される日を待ち望みたい。