Uint8Array.prototype.setFromBase64()
Baseline
2025
Newly available
Since September 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
setFromBase64() 㯠Uint8Array ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ããã® Uint8Array ãªãã¸ã§ã¯ãã« base64 ã¨ã³ã³ã¼ããããæååã®ãã¤ãåãæ ¼ç´ããèªã¿è¾¼ãã ãã¤ãæ°ã¨æ¸ãè¾¼ãã ãã¤ãæ°ã示ããªãã¸ã§ã¯ããè¿ãã¾ãã
ãã®ã¡ã½ããã¯ãäºåã«å²ãå½ã¦ãããé
åãããã¡ã¼ã«ãã¼ã¿ãæ ¼ç´ããã®ã«æé©ã§ããbase64 ã¨ã³ã³ã¼ããããæååããæ°ãã Uint8Array ãªãã¸ã§ã¯ãã使ãããå ´åã¯ã代ããã«éçã¡ã½ãã Uint8Array.fromBase64() ã使ç¨ãã¦ãã ããã
æ§æ
setFromBase64(string)
setFromBase64(string, options)
弿°
string-
Uint8Arrayã«æ¸ãè¾¼ããã¤ããã¨ã³ã³ã¼ããã base64 æååãUint8Array.fromBase64()ã®string弿°ã¨åãè¦ä»¶ã§ããæååã¯ãé åãæºããããã¾ã§ã®ç¹ã¾ã§ããèªã¿è¾¼ã¾ããªãããããã®ç¹ä»¥éã®ä¸æ£ãª base64 æ§æã¯ç¡è¦ããã¾ãã optionsçç¥å¯-
base64 æååã®è§£éããã»ã¹ãã«ã¹ã¿ãã¤ãºãããªãã¸ã§ã¯ãã§ããããã¯ã
Uint8Array.fromBase64()ã®options弿°ã¨åãè¦ä»¶ã§ãã
è¿å¤
次ã®ããããã£ãå«ã¾ãã¦ãããªãã¸ã§ã¯ãã§ãã
read-
å ¥åæååããèªã¿è¾¼ã¾ãã base64 ã®æåæ°ããã³ã¼ãããããã¼ã¿ãé åã«åã¾ãå ´åãããã¯å ¥åæååã®é·ãï¼ããã£ã³ã°ãå«ãï¼ã§ããããã§ãªãå ´åãããã¯é åã«åã¾ãæå¾ã®å®å ¨ãª 4 æåã®å¡ã¾ã§ã®é·ãã§ããå¡ã¯æ±ºãã¦åå²ããã¾ããï¼æ®ãã®ãããã¯ãå®å ¨ã«åã¨ã³ã³ã¼ãããªã㨠base64 ã«é¨åçã«ãæ»ãããã¨ãã§ããªãããï¼ã次ã®å¡ãé åã®æ®ãã®é¨åã«åã¾ããªãå ´åããã®å¡ã¯å®å ¨ã«èªã¿è¾¼ã¾ãããé åã®æå¾ã® 1 ã¾ã㯠2 ãã¤ãã¯æ¸ãè¾¼ã¾ãã¾ããã
written-
Uint8Arrayã«æ¸ãè¾¼ã¾ãããã¤ãæ°ããã®Uint8Arrayã®byteLengthãã大ãããªããã¨ã¯ããã¾ããã
ä¾å¤
SyntaxError-
å ¥åæååã«æå®ããã¢ã«ãã¡ããã以å¤ã®æåãå«ã¾ãã¦ããå ´åãã¾ãã¯æå¾ã®å¡ã
lastChunkHandlingãªãã·ã§ã³ã®æ¡ä»¶ãæºããã¦ããªãå ´åã«çºçãã¾ãã TypeError-
次ã®ããããã®å ´åã«çºçãã¾ãã
- å ¥åæååãæååã§ã¯ãªãå ´åã
optionsãªãã¸ã§ã¯ãããªãã¸ã§ã¯ãã¾ãã¯undefinedã§ã¯ãªãå ´åã- ãªãã·ã§ã³ãæå¾
ãããå¤ã¾ãã¯
undefinedã§ã¯ãªãå ´åã
ä¾
>base64 æååã®ãã³ã¼ã
ãã®ä¾ã§ã¯ãæ¢å®ã® alphabet ããã³ lastChunkHandling ãªãã·ã§ã³ã使ç¨ãã¦ãbase64 æååãæ¢åã® Uint8Array ã«ãã³ã¼ããã¦ãã¾ãã
const uint8Array = new Uint8Array(16);
const result = uint8Array.setFromBase64("PGI+ TURO PC9i Pg==");
console.log(result); // { read: 19, written: 10 }
console.log(uint8Array);
// Uint8Array(16) [60, 98, 62, 77, 68, 78, 60, 47, 98, 62, 0, 0, 0, 0, 0, 0]
é·ãæååãå°ããªé åã«ãã³ã¼ã
æååã«é åãä¿æã§ãããã¼ã¿ãããå¤ãã®ãã¼ã¿ãå«ã¾ãã¦ããå ´åãã¡ã½ããã¯ããããã廿£ãããã¨ãªããé åãä¿æã§ãããã¤ãæ°ã ãæ¸ãè¾¼ã¿ã¾ãã
const uint8Array = new Uint8Array(8);
const result = uint8Array.setFromBase64("PGI+ TURO PC9i Pg==");
console.log(result); // { read: 9, written: 6 }
console.log(uint8Array);
// Uint8Array(8) [60, 98, 62, 77, 68, 78, 0, 0]
é åã®æå¾ã® 2 ãã¤ããæ¸ããã¦ããªããã¨ã«æ³¨æãã¦ãã ããããã® 2 ãã¤ãããã³ã¼ãããã«ã¯ã18 ãããã表ã 3 æå以ä¸ã® base64 æåãèªã¿è¾¼ãå¿ è¦ãããã¾ãããããã¯ãé åã®æ®ãã® 2 ãã¤ãã«ã¯åã¾ããªãããã2 ã¤ã®å¡ãã¤ã¾ã 6 ãã¤ãããæ¸ãè¾¼ããã¨ãã§ãã¾ããã
ç¹å®ã®ãªãã»ããã§ã®ãã¼ã¿è¨å®
setFromBase64() ã¡ã½ããã¯ã常㫠Uint8Array ã®å
é ããæ¸ãè¾¼ã¿ãå§ãã¾ããé
åã®éä¸ããæ¸ãè¾¼ãå ´åã¯ã代ããã« TypedArray.prototype.subarray() ã«æ¸ãè¾¼ããã¨ãã§ãã¾ãã
const uint8Array = new Uint8Array(16);
// ãªãã»ãã 2 ããæ¸ãå§ãã
const result = uint8Array.subarray(2).setFromBase64("PGI+ TURO PC9i Pg==");
console.log(result); // { read: 19, written: 10 }
console.log(uint8Array);
// Uint8Array(16) [0, 0, 60, 98, 62, 77, 68, 78, 60, 47, 98, 62, 0, 0, 0, 0]
ã¹ããªã¼ã ãã³ã¼ã
ãã®ä¾ã¯ãå
ã®ææ¡ãæ¹å¤ãããã®ã§ããããã¯ãstream ãªãã·ã§ã³ã«å¯¾å¿ãã TextDecoder API ãæ¨¡å£ãã¦ãã¾ããä¸å®å
¨ãªå¡ãå¦çããããã« lastChunkHandling: "stop-before-partial" ã使ç¨ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
class Base64Decoder {
#extra = "";
decode(chunk = "", options = {}) {
const opts = { ...options };
// match TextEncoder API
if (opts.stream) {
opts.lastChunkHandling = "stop-before-partial";
}
chunk = this.#extra + chunk;
this.#extra = "";
// åãããããããã«ã以ä¸ã®è¨ç®ãååã§ãããã¨ãä¿è¨¼ããããã³ã«
// æ°ããã¡ã¢ãªã¼ãå²ãå½ã¦ã¾ãããã¡ã¢ãªã¼ãå®éã«å¿é
ãªå ´åã¯ã
// 空ç½ãããå ´åãå²ãå½ã¦éãã«ãªãå¯è½æ§ãããã¾ãã
// ã¡ã¢ãªã¼ãå¿é
ãªå ´åã¯ãTextDecoder ã¹ã¿ã¤ã« API ã¯ä¸é©åãªé¸æã§ãã
let buffer = new Uint8Array(Math.ceil((chunk.length * 3) / 4));
const { read, written } = buffer.setFromBase64(chunk, opts);
buffer = buffer.subarray(0, written);
this.#extra = chunk.slice(read);
return buffer;
}
}
const decoder = new Base64Decoder();
console.log(decoder.decode("SG Vsb ", { stream: true }));
// Uint8Array(3) [72, 101, 108]
console.log(decoder.decode("G8gV29ybGR ", { stream: true }));
// Uint8Array(6) [108, 111, 32, 87, 111, 114]
console.log(decoder.decode(""));
// Uint8Array(2) [108, 100]
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-uint8array.prototype.setfrombase64> |