[解決済み] JSONの文字エンコーディング - UTF-8はブラウザでよくサポートされていますか、それとも数字のエスケープシーケンスを使用すべきですか?
質問
私は、リソースを表現するためにjsonを使用するウェブサービスを書いています。そして、jsonをエンコードする最良の方法について考えて、少し困っています。json rfcを読むと ( http://www.ietf.org/rfc/rfc4627.txt ) エンコーディングはutf-8が好ましいことは明らかです。しかし、rfcは文字を指定するための文字列エスケープメカニズムも記述しています。これは一般的に非アスキー文字をエスケープするために使用され、それによって結果のutf-8を有効なアスキー文字にすると推測されます。
そこで、asciiではないUnicode文字(コードポイント)を含むjson文字列があるとします。ウェブサービスはこれをutf-8エンコーディングして返すべきでしょうか、それともこれらの非アスキー文字をすべてエスケープして純粋なアスキー文字を返すべきでしょうか?
ブラウザでjsonpやevalを使って結果を実行できるようにしたいのですが。それは判断に影響するのでしょうか?様々なブラウザのjavascriptのutf-8対応についての知識が不足しています。
EDIT: 結果をどのようにエンコードするかという私の主な懸念は、実際には結果のブラウザ処理についてであることを明確にしたかったのです。私が読んだところでは、特にJSONPを使用する場合、ブラウザはエンコーディングに敏感である可能性があるようです。この件に関して本当に良い情報を見つけられていないので、何が起こるかを確認するために、いくつかのテストを開始する必要があります。理想的には、必要な数文字だけをエスケープして、結果をutf-8エンコードしたいと思います。
どのように解決するのですか?
JSONの仕様 が必要です。 デコーダはUTF-8をサポートしています。その結果、すべてのJSONデコーダは、数値エスケープシーケンスを扱えるのと同様に、UTF-8を扱えるようになりました。 これは、Javascriptインタープリタについても同様で、JSONPはUTF-8でエンコードされたJSONを同様に扱うことになります。
JSONエンコーダーが数値エスケープシーケンスを代わりに使用できるようになったことで、選択肢が増えました。 数値エスケープシーケンスを選択する理由の1つは、トランスポートメカニズムが 間に エンコーダと目的のデコーダがバイナリセーフでない場合。
数値エスケープシーケンスを使用したいもう一つの理由は、以下のような特定の文字がストリームに現れるのを防ぐためです。
<
,
&
と
"
これは、JSONコードがHTMLにエスケープされずに配置されたり、ブラウザが誤ってHTMLとして解釈した場合に、HTMLシーケンスとして解釈される可能性があります。これは、HTMLインジェクションやクロスサイトスクリプティングに対する防御となり得ます(注意: JSONではいくつかの文字はエスケープされなければなりません(MUST)。
"
と
\
).
フレームワークの中には、PHPの
json_encode()
(デフォルトでは)です。
常に
は、ASCII 以外の文字に対してエンコーダ側で数値エスケープシーケンスを行います。 これは、限られたトランスポート機構などとの互換性を最大限に高めるために意図された、ほとんど不要な追加ステップです。 しかし、これは、JSONデコーダがUTF-8で問題があることを示すものとして解釈されるべきではありません。
だから、こうやってどっちを使うか決めればいいんだと思う。
-
エンコーダーとデコーダーの間のストレージやトランスポートに使用しているソフトウェアがバイナリセーフでない場合を除き、UTF-8を使用してください。
-
それ以外の場合は、数値のエスケープシーケンスを使用してください。
関連
-
[解決済み] Spring RestTemplateクライアント - 接続拒否例外
-
[解決済み] RESTとRPCのWebサービスの違い
-
[解決済み] JSONの文字エンコーディング - UTF-8はブラウザでよくサポートされていますか、それとも数字のエスケープシーケンスを使用すべきですか?
-
[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] わかりやすく言うと「Webサービス」って何?
-
[解決済み] セキュアなWebサービス:REST over HTTPS vs SOAP + WS-Security。どちらが優れているか?[クローズド]。
-
[解決済み] なぜSOAPベースのサービスではなく、RESTを使うのか?[クローズド]
-
[解決済み] URLに含まれるユニコード文字
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PeopleSoftで標準的なWebサービスAPIが利用可能ですか?
-
[解決済み] JSONの文字エンコーディング - UTF-8はブラウザでよくサポートされていますか、それとも数字のエスケープシーケンスを使用すべきですか?
-
[解決済み】RESTウェブサービスを使用して、メタデータを含むファイルをアップロードするにはどうすればよいですか?
-
[解決済み】P99のレイテンシーって何ですか?
-
[解決済み] わかりやすく言うと「Webサービス」って何?
-
[解決済み] セキュアなWebサービス:REST over HTTPS vs SOAP + WS-Security。どちらが優れているか?[クローズド]。
-
[解決済み] WSDL、SOAP、RESTとは何ですか?
-
[解決済み] なぜSOAPベースのサービスではなく、RESTを使うのか?[クローズド]
-
[解決済み] Delphi XE用SOAPサーバー&クライアントアプリケーションVCL+Indyデモ?
-
[解決済み] Web APIとWebサービスの違いは何ですか?