2009-10-04 21 views
8

json仕様では、json文字列(\ uXXXX形式)でエスケープされたユニコードを使用できます。これは、有効なエスケープコードポイントとして制限付きコードポイント(非文字)を具体的に記述します。これはパーサーが非文字列と制限されたコードポイントを含む文字列から違法なUnicodeを生成するべきであることを暗示していませんか?エスケープされたユニコードをjsonパーサとエンコーダでどのように処理する必要がありますか?

例:

{ "key": "\uFDD0" } 

このいずれかをデコードするには、あなたのパーサがエスケープコードポイントの解釈を試みませんか、それは無効なUnicode文字列を生成する必要があります。それはありませんか?

+0

良い質問です。私は自分自身にこれを疑問に思ってきた。 –

+0

あなたはどんなJSON仕様を見ていますか? RFC 4627はそのようなことは言わない、AFAICT。 –

答えて

3

"制限付きコードポイント"とはどういう意味ですか?あなたはその言語を使用してどのような仕様を見ていますか?

サロゲートについて言えば、JavaScriptはサロゲートについてほとんど何も知らない(*)ことがあり、すべてのシーケンスのすべてのUTF-16コードポイントを有効として扱います。 JavaScriptがサポートするものに限られているJSONも同じです。

*:JSの唯一の部分は、無効なサロゲートシーケンスをエンコードしようとする試みがうまくいかないUTF-8エンコーディングを使用するため、サロゲートに特別なことはないと思います。お試しください:

encodeURIComponent('\ud834\udd1e'.substring(0, 1)) 

例外が発生します。

(GAH!SO基本多言語面の外側から文字を直接投稿できるようにするためではないようです。TSK。)

5

あなたが解読すると、unicode replacement characterU+FFFDのための適切な使用であろうと思われます。 the Unicode Character Databaseから

値が不明または表現不可能であるユニコードに
  • 代替機能
  • を示す制御文字としてU + 001Aの使用を比較する入力文字を置き換えるために使用
    関連する問題