webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Zeichenfolge in ein Unicode-Zeichen konvertieren?

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: "™"
29
Harmen

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.

26
Digital Plane

String.fromCharCode("0x" + input)

oder

String.fromCharCode(parseInt(input, 16)), da es sich um 16-Bit-Nummern handelt (UTF-16)

14
Raynos

JavaScript verwendet intern UCS-2.

Daher funktioniert String.fromCharCode(codePoint) nicht für zusätzliche Unicode-Zeichen. Wenn codePoint119558 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'
9
Mathias Bynens
var hex = '2122';
var char = unescape('%u' + hex);

console.log(char);

wird "™" zurückgeben

1
Sonny Piers

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:

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

0
Adriano