2010-07-06 5 views
2

J'ai la chaîne suivante "\u3048\u3075\u3057\u3093". J'ai obtenu la chaîne à partir d'une page Web dans le cadre des données renvoyées dans JSONP.Obtention d'une signification de la chaîne

Qu'est-ce que c'est? Il ressemble à UTF8, mais devrait-il ressembler à "U+3048U+3075U+3057U+3093"?

Quelle est la signification des barres obliques inverses (\)?

Comment puis-je le convertir en une forme lisible par l'homme?

Je cherche une solution avec Ruby, mais toute explication de ce qui se passe ici est appréciée.

Répondre

2

Il est Unicode, mais pas en UTF-8, il est en UTF-16. Vous pouvez ignorer les paires de substitution et les considérer comme des points de code hexadécimal à 4 chiffres d'un caractère de code Unicode.

En utilisant Ruby 1.9:

require 'json' 

puts JSON.parse("[\"\\u4e00\",\"\\u4e8c\"]") 

Prints:

一 
二 
0

Les caractères Unicode dans JSON sont protégés par une barre oblique inverse suivie de quatre chiffres hexadécimaux. Voir la production de cordes sur json.org.

Tout analyseur de JSON va convertir à la représentation correcte pour votre plate-forme (si elle ne fonctionne pas, par définition, il n'est pas un analyseur de JSON)

4

La syntaxe U+3048 est normalement utilisé pour représenter le point de code Unicode d'un caractère. Ce point de code est fixe et ne dépend pas du codage (UTF-8, UTF-32 ...).

Une chaîne JSON est composée de caractères Unicode à l'exception des guillemets doubles et des barres obliques inverses et de ceux de la plage U + 0000 à U + 001F (caractères de contrôle). Les caractères peuvent être représentés avec une séquence d'échappement commençant par \u et suivie de 4 chiffres hexadécimaux qui représentent le point de code Unicode du caractère. C'est la syntaxe JavaScript (JSON en est un sous-ensemble). En JavaScript, la barre oblique inverse est utilisée comme caractère d'échappement.