Spec-Zone.ru › JavaScript

Uint8Array.prototype.toBase64()

Базовый уровень Недавно появился

Эта функция работает во всех последних версиях устройств и браузеров. Эта функция может не работать в более старых версиях устройств или браузеров. Она доступна во всех браузерах с сентября 2025 года.

Метод toBase64() экземпляров Uint8Array возвращает строку, закодированную в формате base64, основанную на данных в этом объекте Uint8Array.

Этот метод следует предпочесть Window.btoa(), особенно если у вас уже есть Uint8Array, содержащий объект, поскольку вам не нужно сначала преобразовывать его в строку.

Синтаксис

toBase64()
toBase64(options)

Параметры

options Необязательно
Объект, настраивающий формат строки base64. Он может содержать следующие свойства:
alphabet Необязательно
Строка, определяющая используемый алфавит base64. Это может быть одно из следующего:
"base64" (по умолчанию)
Кодирует входные данные стандартным алфавитом base64, который использует + и /.
"base64url"
Кодирует входные данные URL-безопасным алфавитом base64, который использует - и _.
omitPadding Необязательно
Логическое значение, указывающее, следует ли опускать символы заполнения (=) в конце строки base64. Значение по умолчанию — false.

Возвращаемое значение

Строка, закодированная в base64, представляющая данные в Uint8Array.

Исключения

TypeError
Выбрасывается в одном из следующих случаев:
  • Объект options не является объектом или undefined.
  • options.alphabet не имеет ожидаемых значений или undefined.

Примеры

Кодирование бинарных данных

В этом примере используются параметры alphabet и omitPadding по умолчанию для кодирования данных из Uint8Array в строку base64.

const uint8Array = new Uint8Array([29, 233, 101, 161]);
console.log(uint8Array.toBase64()); // "HelloQ=="

Кодирование данных без заполнения

const uint8Array = new Uint8Array([29, 233, 101, 161]);
console.log(uint8Array.toBase64({ omitPadding: true })); // "HelloQ"

Кодирование данных с URL-безопасным алфавитом

В этом примере объект URLSearchParams заполняется строкой, закодированной в base64, с использованием URL-безопасного алфавита.

const uint8Array = new Uint8Array([46, 139, 222, 255, 42, 46]);
const base64 = uint8Array.toBase64({ alphabet: "base64url" });
const params = new URLSearchParams();
params.set("data", base64);
console.log(params.toString()); // "data=Love_you"

Потоковое кодирование

Этот пример адаптирован из исходного предложения, демонстрируя, как реализовать потоковую передачу в пользовательском коде. Он имитирует API TextEncoder с опцией stream.

class Base64Encoder {
  #extra;
  #extraLength;
  constructor() {
    this.#extra = new Uint8Array(3);
    this.#extraLength = 0;
  }

  // Partly derived from https://github.com/lucacasonato/base64_streams/blob/main/src/iterator/encoder.ts
  encode(chunk = Uint8Array.of(), options = {}) {
    const stream = options.stream ?? false;

    if (this.#extraLength > 0) {
      const bytesNeeded = 3 - this.#extraLength;
      const bytesAvailable = Math.min(bytesNeeded, chunk.length);
      this.#extra.set(chunk.subarray(0, bytesAvailable), this.#extraLength);
      chunk = chunk.subarray(bytesAvailable);
      this.#extraLength += bytesAvailable;
    }

    if (!stream) {
      // assert: this.#extraLength.length === 0 || this.#extraLength === 3 || chunk.length === 0
      const prefix = this.#extra.subarray(0, this.#extraLength).toBase64();
      this.#extraLength = 0;
      return prefix + chunk.toBase64();
    }

    let extraReturn = "";

    if (this.#extraLength === 3) {
      extraReturn = this.#extra.toBase64();
      this.#extraLength = 0;
    }

    const remainder = chunk.length % 3;
    if (remainder > 0) {
      this.#extra.set(chunk.subarray(chunk.length - remainder));
      this.#extraLength = remainder;
      chunk = chunk.subarray(0, chunk.length - remainder);
    }

    return extraReturn + chunk.toBase64();
  }
}

const encoder = new Base64Encoder();

console.log(
  encoder.encode(Uint8Array.of(72, 101, 108, 108, 111), { stream: true }),
);
// "SGVs"
console.log(
  encoder.encode(Uint8Array.of(32, 87, 111, 114, 108, 100), { stream: true }),
);
// "bG8gV29y"
console.log(encoder.encode());
// "bGQ="

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-uint8array.prototype.tobase64

Совместимость с браузерами

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
toBase64
140
140
133
124
18.2
140
133
92
18.2
30.0
140
18.2
1.1.22
2.5.0
25.0.0

Смотрите также

  • Полифил Uint8Array.prototype.toBase64 в core-js
  • Полифил es-shims для Uint8Array.prototype.toBase64
  • Uint8Array
  • Uint8Array.fromBase64()
  • Uint8Array.prototype.setFromBase64()
  • Window.btoa()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API