Подтвердить что ты не робот

Как преобразовать строку в символ Юникода?

В Javascript '\uXXXX' возвращается символ юникода. Но как я могу получить символ Юникода, когда часть 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: "™"
4b9b3361

Ответ 1

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

Ответ 2

String.fromCharCode("0x" + input)

или

String.fromCharCode(parseInt(input, 16)), поскольку они являются 16-битными числами (UTF-16)

Ответ 3

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

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

Если вы хотите создать строку на основе кодовой точки без BMP Unicode, вы можете использовать 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'

Ответ 4

var hex = '2122';
var char = unescape('%u' + hex);

console.log(char);

вернет "™"