« SET CHARACTER SET - Xoops - | メイン | 待望のジオコーディング復活! »

JSON の response header Edit...

XML ではなく JSON で GoogleMapAPI を利用していると Safari にて文字化けするという報告が。
XMLの場合は、以下でOKな様子。(或いは BOM ですが、これはやめ。)
<?xml version="1.0" encoding="utf-8"?>
さて、JSON の場合ですが、基本的には response header の charset をしっかりと設定してあげれば良さそうです。最初は何も考えずに
Content-type: text/html
としていました(IEやFFでも全く問題無し)が、charset すべしということで
Content-type: text/html; charset=UTF-8
に変更しようとして更に調査を進めると JSONとContent-Type を発見。ここを見ると、Content-type は html ではなくて javascript になってました。そういえば何も考えていなかったので、JSON のヘッダーは html にしていたのですが、結局 JSON のヘッダーは何が適切なのかという疑問。

では、時代の最先端はどうなっているのかを再調査。上のエントリーにもあるように Catalyst::View::JSON に答えがありました。
    if (($c->req->user_agent || '') =~ /Opera/) {
        $c->res->content_type("application/x-javascript; charset=$encoding");
    } else {
        $c->res->content_type("application/json; charset=$encoding");
    }

なるほど。ちなみにここからは蛇足で更にドキュメントを読み進めると、

Due to the browser gotchas like those of Safari and Opera, sometimes you have to specify a valid charset value in the response's Content-Type header, e.g. text/javascript; charset=utf-8.

ん、gotchas
辞書を調べてもこの単語が出てきません^^ 気になったので更に調べてみると...

Gotchasのもともとの意味は「罠、落とし穴、エラー」といった意味

だそうです。色々と勉強になりましたm(_ _)m

【追記】
http://www.rfc-editor.org/rfc/rfc4627.txt にて。

The application/json Media Type for JavaScript Object Notation (JSON)
どのブラウザもこれに統一してもらいましょう。

トラックバック

このエントリーのトラックバックURL:
http://lab.z-nix.jp/cgi-bin/mt/mt-tb.cgi/96

この一覧は、次のエントリーを参照しています: JSON の response header:

» ExtJSのJsonReaderを使うときは、 from Do I like programming?
JSONのレスポンスにちゃんとContent-Typeを設定してあげないと、エラーになるのねー あぁ、これ1時間ぐらいハマッたー \(^o^)/ ... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)