118 votes

Comment décoder une chaîne avec unicode échappé?

Je ne suis pas sûr de ce qui est appelé donc je vais avoir de la difficulté à le rechercher. Comment décoder une chaîne de caractères unicode à partir de http\u00253A\u00252F\u00252Fexample.com de http://example.com avec JavaScript? J'ai essayé d' unescape, decodeURI, et decodeURIComponent donc je suppose que la seule chose qui reste est la chaîne à remplacer.

EDIT: La chaîne n'est pas typé, mais plutôt une sous-chaîne à partir d'un autre morceau de code. Donc pour résoudre le problème, vous devez commencer avec quelque chose comme ceci:

var s = 'http\\u00253A\\u00252F\\u00252Fexample.com';

J'espère que montre pourquoi ne pas encoder() ne fonctionne pas.

146voto

radicand Points 3168
 unescape(JSON.parse('"http\\u00253A\\u00252F\\u00252Fexample.com"'));
> 'http://example.com'
 

Vous pouvez décharger tout le travail sur JSON.parse

128voto

Ioannis Karadimas Points 3911

C'est une unicode, a échappé à la chaîne. D'abord la chaîne a été échappé, puis encodé en unicode. Pour revenir à la normale:

var x = "http\\u00253A\\u00252F\\u00252Fexample.com";
var r = /\\u([\d\w]{4})/gi;
x = x.replace(r, function (match, grp) {
    return String.fromCharCode(parseInt(grp, 16)); } );
x = unescape(x);
console.log(x);

Pour expliquer: - je utiliser une expression régulière pour rechercher \u00253A. Cependant, depuis que j'ai besoin d'une partie seulement de cette chaîne pour remplacer mon opération, j'ai utiliser des parenthèses pour isoler la partie que je vais réutiliser, 253A. Cette partie isolée est appelé un groupe.

L' gi à la fin de l'expression désigne, il devrait correspondre à toutes les instances de la chaîne, et pas seulement le premier, et que la correspondance doit être sensible à la casse. Cela peut paraître inutile donné l'exemple, mais il ajoute de la polyvalence.

Maintenant, pour convertir à partir d'une chaîne à l'autre, j'ai besoin d'exécuter certaines étapes, sur chaque groupe de chaque match, et je ne peux pas le faire simplement en transformant la chaîne. Heureusement, la Chaîne.remplacer l'opération peut accepter une fonction qui sera exécutée pour chaque match. Le retour de cette fonction remplacera le match lui-même dans la chaîne.

J'ai utiliser le deuxième paramètre de cette fonction accepte, qui est le groupe dont j'ai besoin, et de le transformer en l'équivalent de l'utf-8 de la séquence, puis utilisez le haut - unescape fonction de décoder la chaîne à sa propre forme.

3voto

Petah Points 18432

Jetez un œil à cette page: http://www.rishida.net/tools/conversion/

Collez votre code dans la zone de texte supérieure (supprimez d'abord les doubles barres obliques).

Le code est open source: http://www.rishida.net/tools/conversion/conversionfunctions.js

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X