FromCodePoint: примеры (JAVASCRIPT)
fromCodePoint(...codePoints): stringФункция String.fromCodePoint
Статический метод String.fromCodePoint() возвращает строку, созданную из указанной последовательности кодовых точек Unicode. Эта функция появилась в ECMAScript 2015 (ES6) как более надежная альтернатива устаревшему методу String.fromCharCode(), которая корректно работает только с кодом в диапазоне BMP (Basic Multilingual Plane).
Функция используется, когда требуется создать строку из числовых значений кодовых точек, особенно для символов за пределами плоскости BMP (например, эмодзи или редких иероглифов).
Аргументы: метод принимает один или более числовых аргументов, представляющих кодовые точки Unicode (целые числа от 0 до 0x10FFFF).
Возвращаемое значение: строка, соответствующая переданным кодовым точкам. Если аргумент не является числом или находится вне допустимого диапазона, выбрасывается исключение RangeError.
Примеры использования
Создание строки из одной кодовой точки:
console.log(String.fromCodePoint(9731));"☃"
Создание строки из нескольких кодовых точек:
console.log(String.fromCodePoint(65, 66, 67));"ABC"
Использование шестнадцатеричной записи:
console.log(String.fromCodePoint(0x1F600));"????"
Символы за пределами BMP (суррогатные пары):
console.log(String.fromCodePoint(0x1F308));"????"
Похожие функции в JavaScript
String.fromCharCode() - создает строку из последовательности кодовых единиц UTF-16. Основное отличие заключается в обработке символов за пределами BMP. Функция fromCharCode() требует передачи суррогатных пар раздельно, в то время как fromCodePoint() принимает полную кодовую точку.
String.prototype.codePointAt() - выполняет обратную операцию, возвращая кодовую точку Unicode по указанной позиции в строке.
Рекомендуется использовать fromCodePoint() для работы с любыми символами Unicode, а fromCharCode() - для обратной совместимости или при работе только с символами из плоскости BMP.
Типичные ошибки
Передача отрицательного числа или значения превышающего 0x10FFFF:
String.fromCodePoint(-1);RangeError: Invalid code point -1
Передача нечислового аргумента:
String.fromCodePoint('65');RangeError: Invalid code point NaN
Некорректное использование суррогатных половин (значений в диапазоне 0xD800-0xDFFF):
String.fromCodePoint(0xD800);RangeError: Invalid code point 55296
Изменения в последних версиях
Функция String.fromCodePoint() была добавлена в стандарт ECMAScript 2015 (ES6). С момента внедрения существенных изменений в ее работу не вносилось. Основные изменения касались поддержки в различных движках JavaScript и исправления ошибок в обработке граничных значений.
Расширенные примеры
Создание строки с комбинирующимися символами:
console.log(String.fromCodePoint(0x0061, 0x0301));"á"
Генерация последовательности символов:
const codes = [0x41, 0x42, 0x43, 0x1F600];
console.log(String.fromCodePoint(...codes));"ABC????"
Восстановление строки из массива кодовых точек:
const array = [127880, 127881, 127882];
console.log(String.fromCodePoint.apply(null, array));"????????????"
Фильтрация недопустимых значений перед вызовом:
function safeFromCodePoint(...args) {
return String.fromCodePoint(...args.filter(cp =>
Number.isInteger(cp) && cp >= 0 && cp <= 0x10FFFF && !(cp >= 0xD800 && cp <= 0xDFFF)
));
}
console.log(safeFromCodePoint(65, 0xD800, 66));"AB"
Создание пользовательских символов:
const customIcon = String.fromCodePoint(0xE000 + 123);
console.log(customIcon);""
Альтернативы в других языках
Python: функция chr() работает аналогично, но поддерживает только кодовые точки до 0x10FFFF.
print(chr(0x1F600))????
PHP: функция mb_chr() из расширения Multibyte String.
echo mb_chr(0x1F600, 'UTF-8');????
C#: метод char.ConvertFromUtf32() преобразует кодовую точку в строку.
Console.WriteLine(char.ConvertFromUtf32(0x1F600));????
Java: используется конструктор String с массивом кодовых точек или метод Character.toChars().
System.out.println(new String(Character.toChars(0x1F600)));????