Mac版SafariだけJavaScriptが文字化けする!?

先日,不思議な現象に遭遇しました.
Mac OS XのFirefox, Safari, Google Chrome, Operaで,作成したウェブページを確認していたら,SafariだけJSファイルに記述した文字が文字化けするではないですか!
次のようにmetaタグに文字コードを指定してありますが,何故か文字化けします.

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

さらに次のようにJSファイルの文字コードを明示してもやっぱり文字化けします.

<script type="text/javascript" src="hoge.js" charset="utf-8"></script>

もしかして,サーバの設定やファイルの問題じゃない?

ってなわけで,そもそもクライアントの環境に問題があるんじゃないかということで,いろいろ調べたところ,次のコマンドを実行して再ログインすると解決できました.
Flashで文字化けする場合の解決手段です.(参考)

$ echo -n 1:14 > ~/.CFUserTextEncoding

~/.CFUserTextEncoding はCarbonアプリが言語設定として読みに行くファイルらしいです.もともと0:0に設定されていたので日本語と明示したことになります.
あれ?でもSafariってCocoaじゃ…??

これだと文字化けを防ぐためにはサーバ側でどうあがこうと解決できないことになります.
実は,サーバ側にアップすると文字化けするだけで,ローカルでテストした場合は文字化けしませんでした.

何が違うか?

ローカルだと HTTP レスポンスヘッダが Content-Type: text/html; charset=UTF-8 なのに対し,サーバ側だと Content-Type: text/html になっていました!
というわけで,.htaccess に次の内容を書けば解決できるかもしれません.

AddDefaultCharset UTF-8

あるいは次の内容とか.

AddType application/javascript;charset=utf-8 js

“かもしれません” というのは,何故か文字化けが再現できなくなっていたので,ひょっとすると ~/.CFUserTextEncoding の値を書き換えなくてもログインし直せば文字化けが解消できていたかもしれないので,結局何が文字化けしなくなった決定的な要因かはっきりと言えないのです…
そもそもSafariはCocoaアプリですし.
でもどれかを試せば解決できるかもしれないということで…

しかし Safari だけ文字化けしたことは事実なので,いったい何が原因だったのやら…

広告
多変量正規分布とガンマ分布の意外な関係 Twitter のお気に入りをタグで管理するサービス Favmemo をリリースしました!
※このエントリーははてなダイアリーから移行したものです。過去のコメントなどはそちらを参照してください