JavaScript TextEncoder — рядок у байти UTF-8
TextEncoder перетворює рядок на байти UTF-8 — Uint8Array.
Загальний опис
Рядок у JavaScript і байти у файлі — різні речі. Українська літера займає два байти, емодзі — чотири, тож text.length (кількість символів) і реальний розмір у байтах — різні числа.
Кодувальник потрібен усюди, де дані йдуть у двійковий світ: криптографія (crypto.subtle приймає лише байти), WebSocket у двійковому режимі, підрахунок справжнього розміру перед відправкою.
Кодування завжди UTF-8 — іншого варіанта немає й не передбачено.
автор: NagarD
Синтаксис
const bytes = new TextEncoder().encode("текст");
властивості
| Властивість | Опис |
|---|---|
| encoding | Завжди utf-8. |
методи
| Метод | Опис |
|---|---|
| encode | Рядок → Uint8Array. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| TextEncoder | 38+ | 19+ | 10.1+ | 25+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| TextEncoder | 38+ | yes | yes | 10.3+ |
Приклади
+ запропонувати свій приклад у пісочниці
Скільки байтів насправді займає рядок і як його захешувати.
// top-level await працює лише в модулях — тут той самий код в async-функції
(async () => {
const encoder = new TextEncoder();
const bytes = encoder.encode('Привіт 👋');
console.log('Привіт 👋'.length); // 9 символів
console.log(bytes.length); // 17 байтів — не те саме!
// crypto приймає лише байти
const hash = await crypto.subtle.digest('SHA-256', encoder.encode('пароль'));
console.log(new Uint8Array(hash).length); // 32
})();
Коментарі
Коментарів ще немає — будьте першим!