#javascript #character-encoding
Вопрос:
Читая документацию в MDN, в ней говорится
Метод TextEncoder.prototype.encode() принимает USVString в качестве входных данных и возвращает Uint8Array, содержащий текст, заданный в параметрах, закодированных с помощью определенного метода для этого объекта TextEncoder.
С другой стороны, в приведенном ниже коде каждый символ в строке преобразуется в его значение в Юникоде и помещается в массив.
Uint8Array.from(
Array.from(value)
.map((letter) =>
letter.charCodeAt(0)
)
)
Часто два метода приводят к одному и тому же результату, но иногда TextEncoder
генерируется более длинный TypedArray, особенно когда кодируемая строка представляет собой декодированный ключ шифрования.
Интересно, почему это так? Связано ли это с преобразованием из начальной строки JS в USVString? Или, возможно, разные схемы кодирования?
Комментарии:
1. в сторону:
.map()
встроен в[].from()
качестве 2-го аргумента, поэтомуArray.from(value, x=>x.charCodeAt(0))
делает то же самое, но короче…2. Спасибо @dandavis — Со всеми этими строками, массивами и буферами я полагаюсь на копирование кода из Интернета: P