← 返回首页
Uint8Array.prototype.toBase64() - JavaScript | MDN

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Uint8Array.prototype.toBase64()

Baseline 2025
最近利用可能

September 2025以降、この機能は最新のバージョンの端末およびブラウザーで動作します。古い端末やブラウザーでは動作しないことがあります。

toBase64()Uint8Array インスタンスのメソッドで、この Uint8Array オブジェクトのデータに基づいて、 base64 でエンコードされた文字列を返します。

このメソッドは、 Window.btoa() よりも推奨されます。特に、オブジェクトを格納する Uint8Array がすでに存在する場合、最初に文字列に変換する必要がないためです。

目次

構文

js
toBase64() toBase64(options)

引数

options 省略可

base64 文字列の書式をカスタマイズするオブジェクトです。次のプロパティを設定することができます。

alphabet 省略可

使用する base64 文字集合を指定する文字列。次のいずれかになります。

"base64" (既定値)

標準の base64 文字集合(+ および / を使用)で入力をエンコードします。

"base64url"

標準の base64 文字集合(- および _ を使用)で入力をエンコードします。

omitPadding 省略可

Base64 文字列の終わりのパディング文字 (=) を除外するかどうかを指定する論理値です。既定は false です。

返値

Uint8Array のデータを表す base64 エンコードされた文字列です。

例外

TypeError

次のいずれかの場合に発生します。

  • options オブジェクトはオブジェクトでも undefined でもない場合。
  • options.alphabet が期待される値ではないか、 undefined である場合。

バイナリーデータのエンコード

この例では、既定の alphabet および omitPadding オプションを使用して、Uint8Array のデータを base64 文字列にエンコードしています。

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

パディングなしのデータのエンコード

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

URL 対応文字でデータをエンコード

この例では、URL 対応文字を使用して base64 エンコードされた文字列を URLSearchParams オブジェクトに格納しています。

js
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"

ストリームエンコード

この例は、元の提案を改変したもので、ユーザーランドでストリーミングを実装する方法を示しています。これは、 stream オプションに対応する TextEncoder API を模倣しています。

js
class Base64Encoder { #extra; #extraLength; constructor() { this.#extra = new Uint8Array(3); this.#extraLength = 0; } // 部分的に 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 Language Specification
# sec-uint8array.prototype.tobase64

ブラウザーの互換性

ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。

関連情報