Wie sollte die Unicode-Behandlung von json-Parsern und -Encodern gehandhabt werden?

8

Die JSON-Spezifikation ermöglicht einen Escape-Unicode in JSON-Strings (in der Form \ uXXXX). Es erwähnt ausdrücklich einen eingeschränkten Codepunkt (ein Nicht-Zeichen) als einen gültigen Escape-Codepunkt. Bedeutet das nicht, dass Parser einen unzulässigen Unicode aus Strings erzeugen sollten, die Noncharacter und eingeschränkte Codepoints enthalten?

Ein Beispiel:

%Vor%

Das Dekodieren dieses Arguments erfordert, dass Ihr Parser keinen Versuch unternimmt, den Escaped-Codepoint zu interpretieren oder dass er eine ungültige Unicode-Zeichenkette generiert. nicht wahr?

    
ArgumentError 04.10.2009, 04:33
quelle

2 Antworten

5

Beim Dekodieren scheint es, dass dies für das Unicode-Ersatzzeichen , U+FFFD .

Von der Unicode-Zeichendatenbank :

  • verwendet, um ein ankommendes Zeichen zu ersetzen, dessen Wert in Unicode
  • unbekannt oder nicht darstellbar ist
  • vergleicht die Verwendung von U + 001A als Steuerzeichen, um die Ersatzfunktion
  • anzuzeigen
Adam Goode 31.10.2009 00:03
quelle
3

Was meinst du mit "eingeschränktem Codepunkt"? Welche Spezifikation sehen Sie, die diese Sprache verwendet? (Ich kann keine solche finden.)

Wenn Sie über die Surrogate sprechen, dann ja: JavaScript kennt fast nichts (*) über Surrogate und behandelt alle UTF-16-Codepunkte in jeder beliebigen Sequenz als gültig. JSON, das auf das beschränkt ist, was JavaScript unterstützt, macht dasselbe.

*: Der einzige Teil von JS, den ich mir vorstellen kann, ist die encodeURIComponent-Funktion, da sie die UTF-8-Codierung verwendet, bei der ein Versuch, eine ungültige Ersatzsequenz zu codieren, nicht funktionieren kann. Wenn Sie versuchen:

%Vor%

Sie erhalten eine Ausnahme.

(Gah! SO scheint nicht zu erlauben, dass Zeichen außerhalb der Basic Multilingual Plane direkt gepostet werden. Tsk.)

    
bobince 04.10.2009 14:19
quelle

Tags und Links