Українська

Розробники · Base64 енкодер & decoder

Чому btoa() кидає на смайликів і як Base64-encode UTF-8 в JavaScript

· Як працює

Опубліковано ToolAcre · Рецензування журналу

бази64 Унікод коди

Символи Unicode перетворені в UTF-8 байти перед кодуванням Base64
Головна ToolAcre векторна ілюстрація

btoa() приймає символи до U+00FF, щоб підкреслити текст, CJK і смайлики кидають. Ця пошта показує, що функція дійсно очікує і як TextEncoder отримує вам правильний UTF-8 base64 рядок.

Чому бтоа може кинути на Unicode - і мовчки не вдається зашифрувати акцент

Дзвоните до btoa("😀") кидає InvalidCharacterError, тому що смайлики не можуть вписуватися в єдиний блок коду. Блискуча помилка - btoa("е"): precomposed é є U+00E9, нижче 256, so btoa приймає його, але кодує латинську-1 byte E9, не UTF-8 байти C3 A9. Те ж помітний акцент, написаний як e плюс комбінований знак, може кинути, оскільки знак зовні прийнятого діапазону. Короткий підсумок робочої книги «ан акцент кидає» необхідну кваліфікацію: рядок не може голосно або спокійно випускати неправильні байти.

Що бтоа () дійсно кодує: бінарний рядок одиниць коду 0–255 — чому функція була розроблена навколо латинської1 bytes не містить тексту Unicode

btoa споживає “бінарний рядок”: кожен JavaScript введіть номер мобільного, який ви вказали при укладаннi договору з банком - для ідентифікації 0–255 і стійки для одного байту. Не розуміється, що кодування тексту Unicode, мова або нормалізація. The astral еморандуми представлений двома UTF-16 висохлі кодові одиниці, як багато більше, ніж 255, так що відправка сировини JavaScript рядок безпосередньо не може працювати. Визначити вихід як кодування байтів, не абстрактних символів.

UTF-8 first, Base64 другий — чому текст повинен стати байтами перед будь-яким алфавітом Base64

ТекстВоді перетворюється на JavaScript рядок в її UTF-8 спочатку попередня послідовність. Потім перетворюйте кожну опцію в бінарний символ і пропустіть, що бінарний рядок до btoa, або використовуйте інший API що приймає байти безпосередньо. Для декодування, atob повертає бінарний рядок; відновити його значення і дати їх на TextDecoder("utf-8"). ToolAcre використовує суворий декодер, який відмовляється від неформованого UTF-8 замість тихого вставки замінних символів.

Успішний приклад: кодування 'café 😀' з TextEncoder і btoa — послідовність байтів, проміжний бінарний рядок і кінцевий вихід

Для літрового текстового кафе 😀 😀 😀 😀 😀 😀 😀 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , UTF-8 байти 63 61 66 C3 A9 (К2 А9) 20 Ф0 9Ф 98 80 в шістнадцятковому режимі: ASCII c-a-f, два байти для é, простору та чотири байти для смайликів. Base64 цих десятибайтів Y2Fmw6kg8J+YgA==. Набивання і алфавіт описувати байт тільки; вони не позначені мовою. Порівняйте прямий btoa("café 😀") збій ToolAcre’ UTF-8 режим, потім відхиляйте його результат і перевірте той же видимий акцент і смайлики вижити.

Старий безпам'яний пейзаж (encodeURIComponent()) трюк і чому це хак — що він під капюшоном і чому він не заплутаний

Історичний творець є btoa (незапашний (encodeURIComponent(text))). кодування UTF-8 і безпрайскейпних відкладок як одинарних одиниць коду, але безпрайсінг розшифровується, важко читати і перевернути навколо зловлених самонарядних сурогатів. Це робить зовнішній вигляд перетворення URL обробка навіть при відсутності URL є. TextEncoder має значення, що має значення, а також текст стає байтами, і Base64 працює лише після цього.

Випадання на іншу сторону — парі наob з TextDecoder так кругла поїздка без втрат

Після того, як atob, не викликайте decodeURIComponent на довільних бінарних байтах і сподіваємось, що вони стають текстом. Перетворення кодів символів в Uint8Array і пропустіть його через TextDecoder. У кафе 😀 оригінальний десятибайт UTF-8 послідовність, потім оригінальний рядок. Якщо base64 декодує зображенням або стисненим-файловим байтам, він не може представляти дійсність UTF-8 текст на всіх; ToolAcre звіти, які не вимагають бінарних даних, прочитані про це.

Що це не охоплює - файл і кодування бінарних блоків, base64url варіанти і потокові великі входи

Це пояснення стосується текстового кодування як UTF-8. Файл і Blob Base64, Base64url для JWT сегменти та індексування багатогабітних даних мають різні інтерфейси або потреби пам'яті. Base64 також не зашифровує токени: хто-небудь проводить його може декодувати байти. Декод може прийняти загальний відсутній наповнювачі і білий простір, але міжоперабельність все ще залежить від того, чи є платне навантаження текстові або довільні бінарні дані.

Похід: кодування байтів, не рядків, і перевірити круглу подорож — як Base64 енкодер і декодер робить UTF-8 крок для вас так акценти, CJK і смайлики вижити

Кодування байтів, не сирий JavaScript рядки, потім перевірте круглу подорож. Base64 енкодер & decoder виконує дії текстового редактора та текстовогоDecoder для вас, зберігаючи пасований текст у браузері. RFC 4648 визначає алфавіт і начинок; UTF-8 постачання окремого договору, що перебуває у визначенні символів. Змішуючи два шари є корінь як InvalidCharacterError, так і тихий латинсько-1 корупція.