Uint8Array.fromBase64()
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.
Phương thức tĩnh Uint8Array.fromBase64() tạo một đối tượng Uint8Array mới từ một chuỗi được mã hóa base64.
Nên ưu tiên dùng phương thức này thay vì Window.atob() vì nó trả về một mảng byte, dễ làm việc hơn so với chuỗi chứa các byte thô, trừ khi dữ liệu nhị phân đã giải mã thực sự là văn bản ASCII. Nếu bạn đã có một array buffer được cấp phát và muốn điền vào đó, hãy dùng phương thức instance Uint8Array.prototype.setFromBase64() thay thế.
Cú pháp
Uint8Array.fromBase64(string)
Uint8Array.fromBase64(string, options)
Tham số
string-
Một chuỗi base64 mã hóa các byte cần chuyển đổi thành
Uint8Array. Chuỗi chỉ được chứa các ký tự trong bảng chữ cái base64, bao gồm A–Z, a–z, 0–9 và hai ký tự đặc biệt là+và/(nếu dùngalphabet: "base64"trongoptions) hoặc-và_(nếu dùngalphabet: "base64url"trongoptions). Chuỗi có thể có ký tự đệm=ở cuối. Mọi ký tự khoảng trắng ASCII trong chuỗi đều bị bỏ qua. optionsOptional-
Một đối tượng tùy chỉnh quá trình giải mã chuỗi base64. Có thể chứa các thuộc tính sau:
alphabetOptional-
Một chuỗi chỉ định bảng chữ cái base64 sử dụng. Có thể là một trong các giá trị sau:
"base64"(mặc định)-
Chấp nhận đầu vào được mã hóa bằng bảng chữ cái base64 tiêu chuẩn, sử dụng
+và/. "base64url"-
Chấp nhận đầu vào được mã hóa bằng bảng chữ cái base64 an toàn cho URL, sử dụng
-và_.
lastChunkHandlingOptional-
Một chuỗi chỉ định cách xử lý đoạn cuối của chuỗi base64. Do mỗi 4 ký tự trong base64 mã hóa 3 byte, chuỗi được chia thành các đoạn 4 ký tự. Nếu đoạn cuối có ít hơn 4 ký tự, cần xử lý khác. Có thể là một trong các giá trị sau:
"loose"(mặc định)-
Đoạn cuối có thể là 2 hoặc 3 ký tự base64, hoặc đúng 4 ký tự với ký tự đệm
=. Đoạn cuối được giải mã và thêm vào kết quả. "strict"-
Đoạn cuối phải đúng 4 ký tự với ký tự đệm
=. Ngoài ra, bit tràn (các bit thừa từ ký tự base64 cuối không đại diện cho dữ liệu nào) phải là 0. Đoạn cuối được giải mã và thêm vào kết quả. "stop-before-partial"-
Nếu đoạn cuối đúng 4 ký tự với ký tự đệm
=, nó được giải mã và thêm vào kết quả. Ngược lại, đoạn cuối không đầy đủ bị bỏ qua (nhưng nếu nó chứa một ký tự base64 theo sau bởi=, thì vẫn ném ra lỗi cú pháp). Điều này hữu ích khi chuỗi đến từ một luồng và đoạn cuối chưa hoàn chỉnh. Để biết có bao nhiêu ký tự đầu vào đã được đọc, hãy dùngUint8Array.prototype.setFromBase64()thay thế (trang liên kết cũng có ví dụ về giải mã luồng sử dụng"stop-before-partial").
Giá trị trả về
Một đối tượng Uint8Array mới chứa các byte đã được giải mã từ chuỗi mã hóa base64.
Ngoại lệ
SyntaxError-
Ném ra nếu chuỗi đầu vào chứa các ký tự ngoài bảng chữ cái được chỉ định, hoặc nếu đoạn cuối không thỏa mãn tùy chọn
lastChunkHandling. TypeError-
Ném ra trong một trong các trường hợp sau:
- Chuỗi đầu vào không phải là chuỗi.
- Đối tượng
optionskhông phải là object hoặcundefined. - Các tùy chọn không có giá trị mong đợi hoặc
undefined.
Ví dụ
>Giải mã một chuỗi base64
Ví dụ này sử dụng các tùy chọn alphabet và lastChunkHandling mặc định để giải mã một chuỗi base64. Lưu ý rằng:
- Khoảng trắng trong chuỗi bị bỏ qua.
- Chuỗi có 14 ký tự base64, không phải bội số của 4. Điều này chỉ hợp lệ và có thể giải mã với
lastChunkHandling: "loose". - Đoạn cuối,
Ph, kết thúc bằng ký tựhlà0b100001trong base64, nên 4 bit cuối0001là "bit tràn" và bị bỏ qua. Điều này chỉ hợp lệ và có thể giải mã vớilastChunkHandling: "loose".
const uint8Array = Uint8Array.fromBase64("PGI+ TURO PC9i Ph");
console.log(uint8Array); // Uint8Array(10) [60, 98, 62, 77, 68, 78, 60, 47, 98, 62]
Giải mã một chuỗi base64 an toàn cho URL
Ví dụ này sử dụng tùy chọn alphabet để giải mã một chuỗi base64 an toàn cho URL.
const uint8Array = Uint8Array.fromBase64("PGI-TUROPC9iPg", {
alphabet: "base64url",
});
console.log(uint8Array); // Uint8Array(10) [60, 98, 62, 77, 68, 78, 60, 47, 98, 62]
Giải mã chuỗi base64 với xử lý đoạn cuối nghiêm ngặt
Ví dụ này sử dụng tùy chọn lastChunkHandling để giải mã một chuỗi base64, trong đó đoạn cuối phải đúng 4 ký tự với ký tự đệm = và các bit tràn phải là 0.
const array1 = Uint8Array.fromBase64("PGI+ TURO PC9i Pg==", {
lastChunkHandling: "strict",
});
console.log(array1); // Uint8Array(10) [60, 98, 62, 77, 68, 78, 60, 47, 98, 62]
const array2 = Uint8Array.fromBase64("PGI+ TURO PC9i Ph==", {
lastChunkHandling: "strict",
});
// Ném ra SyntaxError vì h là 0b100001, trong đó 4 bit cuối không phải là 0
const array3 = Uint8Array.fromBase64("PGI+ TURO PC9i Pg", {
lastChunkHandling: "strict",
});
// Ném ra SyntaxError vì đoạn cuối không đúng 4 ký tự
Giải mã chuỗi base64 với xử lý đoạn cuối không đầy đủ
Ví dụ này sử dụng tùy chọn lastChunkHandling để giải mã một chuỗi base64, bỏ qua bất kỳ đoạn cuối không đầy đủ nào.
// Đoạn cuối hoàn chỉnh
const array1 = Uint8Array.fromBase64("PGI+ TURO PC9i", {
lastChunkHandling: "stop-before-partial",
});
console.log(array1); // Uint8Array(9) [60, 98, 62, 77, 68, 78, 60, 47, 98]
// Đoạn cuối cũng hoàn chỉnh với phần đệm
const array2 = Uint8Array.fromBase64("PGI+ TURO PC9i Pg==", {
lastChunkHandling: "stop-before-partial",
});
console.log(array2); // Uint8Array(10) [60, 98, 62, 77, 68, 78, 60, 47, 98, 62]
// Đoạn cuối không đầy đủ; bị bỏ qua
const array3 = Uint8Array.fromBase64("PGI+ TURO PC9i Pg", {
lastChunkHandling: "stop-before-partial",
});
console.log(array3); // Uint8Array(9) [60, 98, 62, 77, 68, 78, 60, 47, 98]
// Đoạn cuối không đầy đủ với phần đệm; vẫn bị bỏ qua
const array4 = Uint8Array.fromBase64("PGI+ TURO PC9i Pg=", {
lastChunkHandling: "stop-before-partial",
});
console.log(array4); // Uint8Array(9) [60, 98, 62, 77, 68, 78, 60, 47, 98]
// Đoạn cuối không đầy đủ, nhưng chứa một ký tự base64 theo sau bởi `=`
const array5 = Uint8Array.fromBase64("PGI+ TURO PC9i P=", {
lastChunkHandling: "stop-before-partial",
});
// Ném ra SyntaxError vì đây không thể là phần của chuỗi base64 hợp lệ
Đặc tả
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-uint8array.frombase64> |