auの携帯でapplication/xhtml+xml; charset=utf-8なサイトを見ると問答無用で文字化けする

ちょっとはまったのでメモ。ググっても同じような症状は見つからなかった。
手元の携帯(W51H)のezwebのブラウザはapplication/xhtml+xmlな文章の文字コードShift_JISとしか認識してくれないようだ。HTMLヘッダの方で文字コードを指定しても文字化けをした。

<?xml version="1.0" encoding="utf-8"?>

こんな感じにxml宣言で文字コードを指定していても文字化けをしていた。metaタグが無いのがいけないのかと思い,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

てな感じで文字コードを指定しても駄目。
結局.htaccessの方をいじって解決。

AddType "text/html; charset=utf-8" .html

RewriteEngine on
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_USER_AGENT} !^KDDI
RewriteCond %{HTTP_USER_AGENT} !^Up.Browser
RewriteCond %{LA-F:REQUEST_FILENAME} \.html
RewriteRule .* - "[T=application/xhtml+xml; charset=utf-8]"

UAからKDDIの携帯電話だと判断される時はtext/htmlを返してやるようにした。こうすると文字化けが無くなった。条件分岐の指定に関しては404 Not Foundを参照した。
UA偽装とかいろいろ考えられるけどとりあえずは対策が面倒なので放置。
PCサイトビューアの方はOperaなだけあって,何もせずとも文字化けせずきちんと表示できていた。
それにしてもMIME Typeを指定すると文字コードが勝手に決められてしまうというのは謎仕様。utf-8に対応してないならapplication/xhtml+xml対応を名乗るなよな―とは思った。他のキャリアのブラウザはどうなんでしょうか。
とりあえず

  • XHTML1.1でウェブサイトを公開していて
  • Another HTML-lint の警告やW3Cの勧告には素直に従って
  • PC向けのXHTMLを特別な処理をすることなく携帯電話でそのまま見れるようにしたいなと思っている

なんて人は要注意。そんな人はなかなか居ないと思うけどw