Поскольку 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'
если вы хотите получить кодовую точку Unicode для каждого символа в строке, вам необходимо преобразовать строку UCS-2 в массив кодовых точек UTF-16 (где каждая суррогатная пара образует одну кодовую точку) , Для этого вы можете использовать служебные функции Punycode.js :
punycode.ucs2.decode('abc'); // [97, 98, 99]
punycode.ucs2.decode('?'); // [119558]