web-dev-qa-db-fra.com

Comment puis-je convertir une chaîne en un caractère Unicode?

En Javascript, '\uXXXX' renvoie un caractère unicode. Mais comment puis-je obtenir un caractère unicode lorsque la partie XXXX est une variable?

Par exemple:

var input = '2122';
console.log('\\u' + input);             // returns a string: "\u2122"
console.log(new String('\\u' + input)); // returns a string: "\u2122"

Le seul moyen auquel je peux penser pour que cela fonctionne est d’utiliser eval; mais j'espère qu'il y a une meilleure solution:

var input = '2122';
var char = '\\u' + input;
console.log(eval("'" + char + "'"));    // returns a character: "™"
29
Harmen

Utilisez String.fromCharCode() comme ceci: String.fromCharCode(parseInt(input,16)). Lorsque vous définissez une valeur Unicode dans une chaîne à l'aide de \u, celle-ci est interprétée comme une valeur hexdécimale. Vous devez donc spécifier la base (16) lorsque vous utilisez parseInt.

26
Digital Plane

JavaScript utilise UCS-2 en interne.

Ainsi, String.fromCharCode(codePoint) ne fonctionnera pas pour les caractères Unicode supplémentaires. Si codePoint est 119558 (0x1D306, pour le caractère '????'), par exemple.

Si vous souhaitez créer une chaîne basée sur un point de code Unicode non-BMP, vous pouvez utiliser les fonctions d’utilitaire Punycode.js / s pour effectuer la conversion entre des chaînes UCS-2 et des points de code UTF-16:

// `String.fromCharCode` replacement that doesn’t make you enter the surrogate halves separately
punycode.ucs2.encode([0x1d306]); // '????'
punycode.ucs2.encode([119558]); // '????'
punycode.ucs2.encode([97, 98, 99]); // 'abc'
9
Mathias Bynens
var hex = '2122';
var char = unescape('%u' + hex);

console.log(char);

retournera "™"

1
Sonny Piers

Depuis ES5, vous pouvez utiliser 

String.fromCodePoint (nombre)

pour obtenir des valeurs unicode supérieures à 0xFFFF.

Ainsi, dans chaque nouveau navigateur, vous pouvez l'écrire de la manière suivante:

var input = '2122';
console.log(String.fromCodePoint(input));

ou si c'est un nombre hexadécimal:

var input = '2122';
console.log(String.fromCodePoint(parseInt(input, 16)));

Plus d'informations:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint

0
Adriano