Andorid2.1のブラウザはShift_JISをサポートしないのか?
11月11日、XperiaがAndroid OSを2.1にアップデートされ、今冬続々と発売されているAndroidスマートフォンの多くがOSバージョン2.1です。
OS2.1のスマートフォンでWebサイトを見ていると、こんなエラーが出てしまい、ページが見られないことがありました。
This page contains the following errors:
error on line 1 at column 36: Unsupported encoding Shift_JIS
Below is a rendering of the page up to the first error.
Shift_JISをサポートしていませんって・・・国内のスマートフォンが日本で普通に使われる文字エンコーディングをサポートしていなかったら大変なことだぞと思い、実際のところを調べてみることにしました。
サンプルページ(PHP)
調査のため以下のようなphpページを用意しました。文字エンコーディングを怒られるエラーが発生したのはサーバー側でなくブラウザ側ですので、ブラウザがShift_JISを扱うところに関係する以下の点に注意しました。
- Content-Typeヘッダの出力
- XML宣言の出力
- 使用する文字エンコーディングはShift_JIS
<?php header("Content-type: application/xhtml+xml; charset=Shift_JIS"); echo "<?xml version="1.0" encoding="Shift_JIS"?>"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="disparea" content="vga" /> <meta name="viewport" content="user-scalable=no, width=device-width"/> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> </head> <body> <h1>(1)Shift_JISのXHTMLページ</h1> <p>【調査】Andorid2.1端末の多くは、Shift_JISのXHTMLページが見えないようです。</p> </body> </html>
Android(OS2.1)スマートフォンの標準ブラウザで表示
「Unsupported encoding Shift_JIS」のエラーが出ました。今回使用したスマートフォンはLYNX 3D(SH-03C)ですが、IS03など他の2.1でも同様の結果を確認しています。
まとめるとこうなる
Content-Typeヘッダの出力をtext/htmlにしたらどうか?XML宣言を書かなければ?、文字エンコーディングがUTF-8、EUC-JPなら?とパターンをそれぞれ用意し、表示した結果を以下の表にまとめてみました。
文字エンコーディング | Content-Typeヘッダ | xml宣言の有無 | 結果 |
---|---|---|---|
Shift_JIS | text/html | 有 | ○ |
無 | ○ | ||
application/xhtml+xml | 有 | × | |
無 | ○ | ||
UTF-8 | text/html | 有 | ○ |
無 | ○ | ||
application/xhtml+xml | 有 | ○ | |
無 | ○ | ||
EUC-JP | text/html | 有 | ○ |
無 | ○ | ||
application/xhtml+xml | 有 | × | |
無 | ○ |
UTF-8は全てOKなので、とりあえずUTF-8で作っていれば安心です。一方Shift_JISとEUC-JPの場合、XHTMLで推奨されるContent-Typeヘッダ「application/xhtml+xml」とXML宣言を真面目に出力するとダメ。非推奨の「text/html」にする、XML宣言を書かない、というルーズな書き方ならOKという結果に。
ちなみに、Android OS 1.6や2.2のスマートフォンでは、Shift_JISやEUC-JPでエラーになる事象は確認されていません。もしかして2.1の段階で入ってしまったバグで、2.2で修正されたのかも?しかし現段階でOS 2.1のスマートフォンが多いことや、これらの2.2へのアップデート時期がしばらく先らしいことを考えると、2.1でのこの挙動は無視できず、UTF-8以外でページを作る際は注意しないといけないということですね。