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)スマートフォンの標準ブラウザで表示

LYNX 3Dでの表示

「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以外でページを作る際は注意しないといけないということですね。

Page Top