In Javascript gibt '\uXXXX'
ein Unicode-Zeichen zurück. Aber wie bekomme ich ein Unicode-Zeichen, wenn der XXXX
-Teil eine Variable ist?
Zum Beispiel:
var input = '2122';
console.log('\\u' + input); // returns a string: "\u2122"
console.log(new String('\\u' + input)); // returns a string: "\u2122"
Ich kann mir nur vorstellen, dass es funktioniert, indem Sie eval
verwenden. Ich hoffe doch, dass es eine bessere Lösung gibt:
var input = '2122';
var char = '\\u' + input;
console.log(eval("'" + char + "'")); // returns a character: "™"
Verwenden Sie String.fromCharCode()
wie folgt: String.fromCharCode(parseInt(input,16))
. Wenn Sie mit \u
einen Unicode-Wert in einen String einfügen, wird er als hexadezimaler Wert interpretiert. Daher müssen Sie bei Verwendung von parseInt
die Basis (16) angeben.
String.fromCharCode("0x" + input)
oder
String.fromCharCode(parseInt(input, 16))
, da es sich um 16-Bit-Nummern handelt (UTF-16)
JavaScript verwendet intern UCS-2.
Daher funktioniert String.fromCharCode(codePoint)
nicht für zusätzliche Unicode-Zeichen. Wenn codePoint
119558
ist (0x1D306
, für das '????'
-Zeichen), zum Beispiel.
Wenn Sie einen String erstellen möchten, der auf einem Nicht-BMP-Unicode-Codepunkt basiert, können Sie die Dienstprogrammfunktionen von Punycode.js verwenden, um zwischen UCS-2-Strings und UTF-16-Codepunkten zu konvertieren:
// `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);
wird "™" zurückgeben
Seit ES5 kannst du verwenden
String.fromCodePoint (Nummer)
um Unicode-Werte größer als 0xFFFF zu erhalten.
In jedem neuen Browser können Sie es so schreiben:
var input = '2122';
console.log(String.fromCodePoint(input));
oder wenn es eine hexadezimalzahl ist:
var input = '2122';
console.log(String.fromCodePoint(parseInt(input, 16)));
Mehr Info: