JSON ne devrait pas.stringify échapper aux caractères Unicode?
j'ai un test simple page en UTF-8 dans lequel le texte avec des lettres dans plusieurs langues différentes obtient stringified en JSON:
HTML:
<textarea id="txt">
検索 • Busca • Sök • 搜尋 • Tìm kiếm • Пошук • Cerca • Søk • Haku • Hledání • Keresés • 찾기 • Cari • Ara • جستجو • Căutare • بحث • Hľadať • Søg • Serĉu • Претрага • Paieška • Poišči • Cari • חיפוש • Търсене • Іздеу • Bilatu • Suk • Bilnga • Traži • खोजें
</textarea>
<button id="encode">Encode</button>
<pre id="out">
</pre>
JavaScript:
$("#encode").click(function () {
$("#out").text(JSON.stringify({ txt: $("#txt").val() }));
}).click();
alors que je m'attends à ce que les caractères non-ASCII soient échappés comme uXXXX selon le JSON spec, ils semblent intacts. Voici la sortie que j'obtiens du test ci-dessus:
{"txt":"検索 • Busca • Sök • 搜尋 • Tìm kiếm • Пошук • Cerca • Søk • Haku • Hledání • Keresés • 찾기 • Cari • Ara • جستجو • Căutare • بحث • Hľadať • Søg • Serĉu • Претрага • Paieška • Poišči • Cari • חיפוש • Търсене • Іздеу • Bilatu • Suk • Bilnga • Traži • खोजेंn"}
je suis en utilisant google Chrome, il devrait donc être le natif JSON.stringify
mise en œuvre. L'encodage de la page est UTF-8. Les personnages non-ASCII ne devraient-ils pas être évadés?
Ce qui m'a amené à ce test, en premier lieu, j'ai remarqué que jQuery.ajax
ne semble pas échapper aux caractères non-ASCII lorsqu'ils apparaissent dans une propriété d'objet de données. Les caractères semblent être transmis comme UTF-8.
4 réponses
la réponse courte à votre question est non; JSON.stringify
ne devrait pas échapper à votre chaîne.
bien que, la manipulation utf8 les chaînes de caractères peuvent sembler étranges si vous enregistrez votre fichier HTML avec utf-8
encodage mais ne pas déclarer un utf8 fichier.
Par exemple:
<!doctype html>
<html>
<head>
<title></title>
<script>
var data="árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP";
alert(JSON.stringify(data));
</script>
</head>
</html>
Ce serait alerte "árvÃztűrÅ‘ tükörfúrógép ÃRVÃZTÅ°RÅ TÃœKÖRFÚRÓGÉP"
.
Mais si vous ajoutez la ligne suivante dans l'en-tête:
<meta charset="UTF-8">
alors, l'alerte être ce que l'on pourrait attendre: "árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"
.
Non. Le codage préféré pour JSON est UTF-8, de sorte que ces caractères n'ont pas besoin d'être échappés.
vous êtes autorisé à échapper aux caractères unicode si vous voulez être plus sûr ou envoyer explicitement le JSON dans un encodage différent (c'est-à-dire, ASCII pur), mais c'est contre les recommandations.
votre demande n'est tout simplement pas vraie. Les chaînes JSON sont composées de codépoints unicode (sauf '"' et '\'), c'est tout. Le document JSON entier peut être encodé en UTF-8, UTF-16 ou UTF-32, à la discrétion du producteur. de plus, les chaînes peuvent contenir des séquences d'échappement qui fournissent un autres forme de nommage des points de code, alternative à leur inclusion littérale.
Si la distinction entre les deux échappe encore vous, voici un exemple de deux différentes façons d'écrire la même chaîne dans JSON:
"A"
"\u0041"
les deux versions représentent la même chaîne, qui consiste en un seul point U + 41, qui est A
.