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

Руководство по fromCharCode: создание строк из кодов символов
Раздел: Строки, Создание
fromCharCode(...codeUnits): string

Описание функции fromCharCode

String.fromCharCode() является статическим методом глобального объекта String. Он возвращает строку, созданную из указанной последовательности кодовых единиц UTF-16. Метод используется для преобразования числовых значений, представляющих символы, в строку.

Аргументы метода: от одного до нескольких чисел (num1, num2, ..., numN). Каждый аргумент должен быть целым числом в диапазоне от 0 до 65535 (0xFFFF), представляющим код символа в кодировке UTF-16. Если значение выходит за пределы диапазона, оно усекается до 16 бит. Если аргументы не предоставлены, возвращается пустая строка.

Возвращаемое значение: новая строка, состоящая из символов, соответствующих переданным кодам. Если код соответствует символу из базовой многоязыковой плоскости (BMP), он преобразуется в один символ. Для символов вне BMP (например, некоторые эмодзи или иероглифы) требуется использование суррогатной пары — двух последовательных кодовых единиц.

Короткие примеры использования

Пример с одним аргументом:

console.log(String.fromCharCode(65));
A

Пример с несколькими аргументами:

console.log(String.fromCharCode(72, 101, 108, 108, 111));
Hello

Пример с шестнадцатеричными значениями:

console.log(String.fromCharCode(0x41, 0x42, 0x43));
ABC

Пример с суррогатной парой для символа вне BMP (смайлик ????):

console.log(String.fromCharCode(0xD83D, 0xDE00));
????

Пример с усечением числа (больше 65535):

console.log(String.fromCharCode(65536 + 65)); // 65536 усекается до 0
A

Похожие функции в JavaScript

String.fromCodePoint() — более современная альтернатива, представленная в ES6. Она поддерживает всю кодовую область Unicode (до 0x10FFFF) и корректно обрабатывает символы вне BMP без необходимости ручного указания суррогатных пар. Аргументы — одно или несколько чисел (кодовых точек).

String.fromCharCode() предпочтительнее для работы с кодовыми единицами UTF-16, например, при обработке бинарных данных или в унаследованном коде. String.fromCodePoint() рекомендуется для работы с любыми символами Unicode, включая новые эмодзи и редкие иероглифы.

Аналоги в других языках программирования

В Python функция chr() преобразует целое число (кодовую точку Unicode) в символ. Работает со всем диапазоном Unicode.

print(chr(65))
A

В PHP функция chr() работает с кодами ASCII (0-255). Для Unicode используется mb_chr() из модуля mbstring.

echo chr(65);
A

В MySQL функция CHAR() возвращает символ по числовому коду ASCII. Для нескольких кодов можно использовать CONCAT.

SELECT CHAR(72, 101, 108, 108, 111);
Hello

В языке C прямой функции нет, но символ можно получить через приведение типа.

#include <stdio.h>
int main() {
    printf("%c", 65);
    return 0;
}
A

Основное отличие JavaScript-функции — работа с UTF-16 и поддержка нескольких аргументов для создания строки любой длины.

Типичные ошибки

Передача отрицательного числа приводит к усечению и получению неожиданного символа.

console.log(String.fromCharCode(-1)); // -1 + 65536 = 65535

Передача нечислового значения может привести к NaN, который интерпретируется как 0.

console.log(String.fromCharCode('A'));

Неправильное формирование суррогатной пары для символа вне BMP. Если передать только один код из пары, получится некорректный символ.

console.log(String.fromCharCode(0xD83D));

Использование десятичных кодов с плавающей точкой. Дробная часть отбрасывается.

console.log(String.fromCharCode(65.9));
A

Изменения в последних версиях

Метод String.fromCharCode() не претерпел значительных изменений в спецификации ECMAScript. Его поведение остаётся стабильным для обратной совместимости. Основное развитие в этой области связано с появлением метода String.fromCodePoint() в ES6 (ECMAScript 2015), который решает проблему работы с символами вне базовой многоязыковой плоскости.

Расширенные примеры использования

Генерация строки из массива чисел:

Пример javascript
const codes = [80, 114, 105, 118, 101, 116];
console.log(String.fromCharCode(...codes));
Privet

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

Пример javascript
let str = '';
for (let i = 97; i <= 122; i++) {
    str += String.fromCharCode(i);
}
console.log(str);
abcdefghijklmnopqrstuvwxyz

Декодирование бинарных данных, представленных в виде массива байтов:

Пример javascript
const byteArray = [0x48, 0x54, 0x54, 0x50];
const text = String.fromCharCode.apply(null, byteArray);
console.log(text);
HTTP

Использование с методом map() для преобразования массива кодов:

Пример javascript
const codePoints = [107, 108, 109, 110];
const chars = codePoints.map(code => String.fromCharCode(code));
console.log(chars.join(''));
klmn

Обработка суррогатных пар для символа ???? (кодовая точка 0x20BB7):

Пример javascript
// Вычисляем суррогатную пару вручную
const high = Math.floor((0x20BB7 - 0x10000) / 0x400) + 0xD800;
const low = (0x20BB7 - 0x10000) % 0x400 + 0xDC00;
console.log(String.fromCharCode(high, low));
????

Сравнение с String.fromCodePoint() для того же символа:

Пример javascript
console.log(String.fromCodePoint(0x20BB7));
????

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

Пример javascript
console.log('Line1' + String.fromCharCode(10) + 'Line2' + String.fromCharCode(9) + 'Indented');
Line1
Line2	Indented

JS fromCharCode function comments

En
FromCharCode Returns a string created from the specified sequence of Unicode values