jsonを使用してリソースを表現するWebサービスを作成しています.Jsonをエンコードする最善の方法について考えています。 json rfc(http://www.ietf.org/rfc/rfc4627.txt)を読むと、好ましいエンコーディングはutf-8であることが明らかです。しかしrfcは、文字を指定するための文字列エスケープメカニズムも記述しています。私はこれが非アスキー文字をエスケープするために一般に使用されると仮定し、結果としてutf-8を有効なasciiにします。JSON文字エンコーディング - ブラウザでうまくサポートされているUTF-8ですか、それとも数値エスケープシーケンスを使用する必要がありますか?
私は、非ASCII文字のUnicode文字(コードポイント)を含むjson文字列を持っているとしましょう。私のwebserviceはutf-8をエンコードして返しますか、それともASCII以外の文字をエスケープして純粋なasciiを返すべきですか?
私は、ブラウザがjsonpまたはevalを使用して結果を実行できるようにしたいと考えています。それは決定に影響しますか? utf-8のさまざまなブラウザのjavascriptサポートに関する私の知識は欠けています。
EDIT:結果をエンコードする方法に関する私の主な懸念は、実際に結果のブラウザ処理に関するものであることを明確にしたかったのです。私が読んだところでは、特にJSONPを使用している場合、ブラウザがエンコーディングに敏感である可能性があります。私はその件について本当に良い情報が見つからなかったので、何が起こるかを見るためにいくつかのテストをやり始めなければなりません。理想的には、必要な文字をエスケープしたいだけで、utf-8は結果をエンコードします。
あなたが指定した引用符を読めば、すべてのユニコード文字をエスケープする必要はなく、少数の特殊文字しか表示されないことがわかります。しかし、結果をエンコードする必要があります(できればutf-8)。だから問題は「あなたがutf-8エンコーディングをしているなら、なぜ普通のUnicode文字をエスケープするのか」ということです。 – schickb
また、asciiでエンコードされた文字列は、utf-8の純粋なサブセットです。 jsonのエスケープ文字をASCII以外のすべての文字に使用すると、結果はascii - したがってutf-8になります。様々なjsonライブラリ(python simplejsonのような)にはascii結果を強制するモードがあります。私は、おそらくブラウザでの実行のような理由で推測します。 – schickb
普通のユニコード文字をエスケープするのは、文字列のようなメタキャラクターのコンテキストにあります。 (私が引用したRFCのチャンクは文字列に関するものですが、残念ですが、そのことについてはっきりしていませんでした)。ASCII出力を常に行う必要はありません。私はそれが壊れたブラウザでのデバッグのためだと思います。 – chaos