Как я могу преобразовать строку в символ Unicode? - PullRequest
32 голосов
/ 15 августа 2011

В Javascript '\uXXXX' возвращает символ Unicode. Но как я могу получить символ Unicode, когда часть XXXX является переменной?

Например:

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

Единственный способ заставить его работать, это использовать eval; но я надеюсь, что есть лучшее решение:

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

Ответы [ 5 ]

31 голосов
/ 15 августа 2011

Используйте String.fromCharCode() как это: String.fromCharCode(parseInt(input,16)). Когда вы помещаете значение Unicode в строку, используя \u, оно интерпретируется как шестнадцатеричное значение, поэтому вам нужно указать base (16) при использовании parseInt.

14 голосов
/ 15 августа 2011

String.fromCharCode("0x" + input)

или

String.fromCharCode(parseInt(input, 16)) как 16-битные числа (UTF-16)

10 голосов
/ 02 февраля 2012

JavaScript использует UCS-2 для внутреннего использования.

Таким образом, String.fromCharCode(codePoint) не будет работать для дополнительных символов Юникода. Например, если codePoint равно 119558 (0x1D306, для символа '?').

Если вы хотите создать строку на основе кодовой точки Unicode, отличной от BMP, вы можете использовать служебные функции Punycode.js для преобразования между строками UCS-2 и кодовыми точками 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'
1 голос
/ 20 июня 2018

Начиная с ES5, вы можете использовать

String.fromCodePoint (число)

, чтобы получить значения Unicode больше 0xFFFF.

Итак, в каждомВ новом браузере вы можете написать его следующим образом:

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

или, если это шестнадцатеричное число:

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

Дополнительная информация:

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

0 голосов
/ 09 июля 2012
var hex = '2122';
var char = unescape('%u' + hex);

console.log(char);

вернет "™"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...