Розробники · Base64 енкодер & decoder
Що стоїть на місці, і чому вони тільки розуміють Латинську мову1
· Підземелля
Опубліковано ToolAcre · Редакція журналу
бази64 Завантажити плагін Унікод

atob і btoa дата з Netscape і імена означати 'ASCII до бінарних і 'binary to ASCIIР. Це повідомлення охоплює, де вони прийшли, як WHATWG стандарти визначають їх, і чому вони ніколи не навчаються Unicode.
Назва функції, яка читає як типо — сплутаність причини назв і відповідь на одну лінію
абатони JavaScript вбудовані функції, які були введені в Netscape в 1990-х роках. Назви аббревіатури: btoa підставки для бінарних до ASCII та стенди ASCII до бінарних. Назви відображають свій вік і дизайн: вони були побудовані, коли бінарні означають рядок значень байтів (0-255) не більше сучасного Uint8Array або Buffer. Мнемічні часто даються для імен менш важливі, ніж спостережний контракт: одна функція карти бінарного рядка в Base64 і інші її зворотні. Цей репозиторій не є документом оригінального рішення про нумерацію, тому стаття уникає представлення фольклору як джерело історії браузера.
Функції очікують бінарного рядка: кожен блок коду символу повинен бути в діапазоні 0-255, що представляє собою один байт. Якщо ви передаєте символ з кодовим блоком вище 255 (як смайл або акцентований лист з зовнішньої латинської мови)1), функція кидає InvalidCharacterError або мовчки виробляє неправильний вихід. бтоа (внутр. до ASCII) кодує бінарну нитку до base64.
Що пропонують імена і що контракт на байт
Введення має бути рядок, де кожен символ є байтом (кодом одиниці 0-255). btoa(hello) кодує ASCII байти як base64 і повертає aGVsbG8=. btoa з літерою e-acute з'являється для роботи, оскільки попередньо з'являється латинська-1 e-acute (U+00E9) має кодовий блок 233, яка знаходиться в межах 0-255. Однак btoa кодує його як одинарний, 0xE9, не UTF-8 bytes 0xC3 0xA9, які повинні вироблятися в електронному вигляді. Перед типом масивів стали нормальні контейнери байтів, JavaScript APIs використовуються рядки, кодові одиниці яких стояв на байтах. Ця модель залишається видимою, тому що btoa відхиляє кодові одиниці вище 255. Точна хронологія продукту не встановлена цими файлами; граничний показник не встановлюється за допомогою виконуваних тестів.
Цей німий корупція є більш небезпечним, ніж помилка: результат виглядає тонко, але невірно. мангал (КСНУМКС)ASCII до бінарних) декоди base64 назад до бінарного рядка. atob(aGVsbG8=) повертає hello. Вихід є бінарним рядком, де кожен блок коду символів є 0-255, що представляє собою один байт. Якщо ви хочете перетворити це в правильний текст Unicode, вам потрібно перекласти байти як UTF-8 і декодувати їх за допомогою TextDecoder.
Модель бінарного рядка Legacy — спостережна поведінка без неперевершеного вимога браузера-history
Для ASCII, цей додатковий крок непотрібний (ASCII є підмножиною UTF-8), але для будь-якого не-ASCII байти, це важливе значення. atob не робить цю інтерпретацію; він повертає сирі байти як бінарний рядок.
Мистецтво WHATWG стандарти (відповідачі для веб- API) визначають атом і бтоу в HTML специфікація. У визначення входить алгоритм попереднього запису-base64 декодування для atob: він пропускає білий простір та приймає відсутні на основі, що робить реальний світ base64 (включаючи інші) MIME-збитий base64 з лініями розривів) декодується. ToolAcre нормалізує біле простір, URL-безпечне відступання та відсутнє натяження перед викликом браузера. Після цього копії повернулися до Uint8Array і застосовує жирний UTF-8 декодер. Що поєднання відокремленого для GISW Base64 синтаксису від строгої текстової інтерпретації.
Поточна поведінка в цій реалізації — засвідчення абетової нормалізації та суворої UTF-8 текстове декодування
У відповідності з встановленими нормами є повноваження для того, що функція не змінюється, але визначення стандартів є повноваженням для того, що функція робить. Чому бувають на носовій основі, і вони не тільки приймають латинську-1? Коли вони були розроблені в 1990-х роках, JavaScript не мав способу представлення байтів безпосередньо (без Uint8Array або ArrayBuffer). Єдиний спосіб проходження байтів до функції був як рядок, де кожен символ показує один байт.
Це називається бінарним рядком і є переконливим сучасними стандартами. А.А JavaScript string is Unicode text, не послідовність байтів. Дизайн схвалив два: рядок, де кожен блок коду 0-255 є бінарним рядком. Наміння відображає епоху: ASCII в btoa буквально означають сім біт для ASCII текст, але реалізація приймає будь-яку байт (0-255... Додавання режиму Unicode безпосередньо до btoa буде змінювати його довгостроковий договір та сумісність з ризиком. Переглянуто джерело замість композицій TextEncoder до кодування. Ця стаття може перевірити, що склад; вона оміє претензій щодо стандартів-коммітентів не записані в репозиторію.
Управлений приклад: калькуляційний тягаючий-base64 на рядку з пробілами і відсутністю насипання — що атом приймає, що суворий декодер відхиляє
Сучасні альтернативи уникнути моделі бінарних рядків. Консервація API надає TextEncoder для перетворення тексту в UTF-8 байтів, і TextDecoder для перетворення UTF-8 байти назад до тексту.
Base64 кодування і декодування тепер вказаний в HTML spec для обох рядків (atob і btoa) і типd масивів. Інструмент для кодування та декодування Base64 використовує текстовий код та текстовийDecoder навколо atob та btoa, тому ви можете безпечно зашифрувати та видалити текст Unicode без латинської1 обмеження. У разі необхідності нормалізацію виводить білий простір і відновлює необхідну довжину блоку. Вартість, чиста довжина якої залишилася одна відхилена перед нарядом. Цей вираз показує, що «перевага» означає тут: відновлений форматування приймається, неможливий вхід неможливий.
Нові стандарти працюють на Base64 для масивів типу — описано якісно, зауважити, що для перевірки поточного опору браузера
Обробка Unicode з btoa вимагає кодування тексту UTF-8 байти спочатку. Стара робота була бтоа (незапаття) (encodeURIComponent(text)), яка є переконливим, але працює: кодURIComponent відсотків-encodes UTF-8 байти, безпашний конвертер польотів назад до символів, і btoa кодує отриману бінарну нитку. Це працює, але спирається на депресовані функції і важко читати. Відкрити карту (byte =>) String.fromCharCode(байт) слідувати btoa, або краще, безпосередньо конвертувати в Uint8Array і використовувати кодування API.
Atob не автоматично дає вам текст; він дає вам бінарні. atob(Y2Fmw6kg8J+YgA=) повертає бінарну нитку, що містить байтибайтів UTF-8-кодовано текст з кеш-пам'ятками та смайлами. Щоб відновити текст, перетворюйте бінарну нитку в Uint8Array і перенесіть його в TextDecoder(utf-8... Інструмент для автоматичного видалення та видалення Base64 автоматично: ви вставте текст, він зашифровує його UTF-8 байти, потім до base64. Види-аррейси Base64 API є за допомогою веб-переглядачів, але це джерело не використовує їх. Залежно від одного вимагає перевірки поточної сумісності та плану знепадання. ToolAcre’відео перетворення за допомогою байтів і неперевершених і покритих його теперішньою тестовою люкс.
Види, які виробляються, є за допомогою параметра, ідентифікатором, що забезпечується, перш ніж в залежності від них
Ви вставляєте base64, він декодує UTF-8 байти, потім в текст. Проміжний дворядний крок прихований, оскільки він є детальмологічних досліджень 1990-х API. Розуміння atob і btoa корисно для видалення коду спадкоподібної спадщини або роботи з застарілими API, які ручать вам бінарні рядки. Найновіші коди повинні уникати бінарної моделі рядків повністю.
Якщо вам необхідно зашифрувати або декодувати base64, то в меню інструментів Base64 і decoder працює Unicode. Якщо ви будуєте API, прийняти Uint8Array або видовий вигляд, або чітко документ, чи є ваш базовий64 UTF-8 або латинська1. При перегляді коду, який використовує btoa з не-ASCII текст без TextEncoder, це помилка: вихід зашифрує неправильні байти. Безпосередній буфер і непереносимості пуску визначаються різні API і правила прийому. Вони навмисно виключаються. У статті розглянуто особливості браузера та конвертер, що реалізується в додатках/dev, не кожна функція, яка називається атом або бтоа в кожному середовищі.
Похід: два 1990-ті функції з контрактом на байт — як працює Base64 енкодер і декодер UTF-8 крок навколо них так акцентує, CJK і смайлики круглого стріма
Назви на аб і бтоа є своєрідними артефактами 1990-х обчислень. Сучасне нумування буде базовим64Encode та base64Decode, а API будуть приймати Uint8Array або рядки з виразними деклараціями кодування. Але нав і btoa persist у браузерах для сумісності з переадресною сумісністю. Розуміння того, що вони не можуть робити) допоможе вам уникнути мовної корупції при кодуванні тексту Unicode.
Інструмент для заглушення та знеболювання Base64 мостить проміжок: він говорить про UTF-8 та базові64 мови, які потребують сучасного коду. Надійний візерунок - це композиційний: зашифрувати текст до UTF-8 байти, конвертувати байти в бінарно-string контракт, потім виклик btoa; зворотні дії навколо atob. Спробуйте акцент, CJK символи та смайли, потім вимагають відшифрованого тексту, щоб відповідати кожному початковому пункту коду.