FromCharCode: примеры (JAVASCRIPT)
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 усекается до 0A
Похожие функции в 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), который решает проблему работы с символами вне базовой многоязыковой плоскости.
Расширенные примеры использования
Генерация строки из массива чисел:
const codes = [80, 114, 105, 118, 101, 116];
console.log(String.fromCharCode(...codes));Privet
Создание строки из последовательности кодов с использованием цикла:
let str = '';
for (let i = 97; i <= 122; i++) {
str += String.fromCharCode(i);
}
console.log(str);abcdefghijklmnopqrstuvwxyz
Декодирование бинарных данных, представленных в виде массива байтов:
const byteArray = [0x48, 0x54, 0x54, 0x50];
const text = String.fromCharCode.apply(null, byteArray);
console.log(text);HTTP
Использование с методом map() для преобразования массива кодов:
const codePoints = [107, 108, 109, 110];
const chars = codePoints.map(code => String.fromCharCode(code));
console.log(chars.join(''));klmn
Обработка суррогатных пар для символа ???? (кодовая точка 0x20BB7):
// Вычисляем суррогатную пару вручную
const high = Math.floor((0x20BB7 - 0x10000) / 0x400) + 0xD800;
const low = (0x20BB7 - 0x10000) % 0x400 + 0xDC00;
console.log(String.fromCharCode(high, low));????
Сравнение с String.fromCodePoint() для того же символа:
console.log(String.fromCodePoint(0x20BB7));????
Создание строки с управляющими символами (например, перевод строки и табуляция):
console.log('Line1' + String.fromCharCode(10) + 'Line2' + String.fromCharCode(9) + 'Indented');Line1 Line2 Indented