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: "™"
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
.
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'
var hex = '2122';
var char = unescape('%u' + hex);
console.log(char);
retournera "™"
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: