FromCodePoint: примеры (JAVASCRIPT)

Функция fromCodePoint для работы с Unicode в 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 и исправления ошибок в обработке граничных значений.

Расширенные примеры

Создание строки с комбинирующимися символами:

Пример javascript
console.log(String.fromCodePoint(0x0061, 0x0301));
"á"

Генерация последовательности символов:

Пример javascript
const codes = [0x41, 0x42, 0x43, 0x1F600];
console.log(String.fromCodePoint(...codes));
"ABC????"

Восстановление строки из массива кодовых точек:

Пример javascript
const array = [127880, 127881, 127882];
console.log(String.fromCodePoint.apply(null, array));
"????????????"

Фильтрация недопустимых значений перед вызовом:

Пример javascript
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"

Создание пользовательских символов:

Пример javascript
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)));
????

JS fromCodePoint function comments

En
FromCodePoint Returns a string created from the specified sequence of Unicode code points