Phương thức btoa[]
tạo một chuỗi ASCII được mã hóa Base64 từ một chuỗi nhị phân [i. e. , một chuỗi trong đó mỗi ký tự trong chuỗi được coi là một byte dữ liệu nhị phân]
Bạn có thể sử dụng phương pháp này để mã hóa dữ liệu có thể gây ra sự cố giao tiếp, hãy truyền nó, sau đó sử dụng phương pháp atob[]
để giải mã lại dữ liệu. Ví dụ: bạn có thể mã hóa các ký tự điều khiển chẳng hạn như các giá trị ASCII từ 0 đến 31
btoa[stringToEncode]
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
0Chuỗi nhị phân để mã hóa
Một chuỗi ASCII chứa biểu diễn Base64 của
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
0const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
2 const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
0Chuỗi chứa một ký tự không vừa với một byte. Xem "Chuỗi Unicode" bên dưới để biết thêm chi tiết
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
Hàm btoa[]
lấy một chuỗi JavaScript làm tham số. Trong các chuỗi JavaScript được biểu diễn bằng mã hóa ký tự UTF-16. trong cách mã hóa này, các chuỗi được biểu diễn dưới dạng một chuỗi các đơn vị 16 bit [2 byte]. Mỗi ký tự ASCII phù hợp với byte đầu tiên của một trong các đơn vị này, nhưng nhiều ký tự khác thì không
Base64, theo thiết kế, mong đợi dữ liệu nhị phân làm đầu vào của nó. Về chuỗi JavaScript, điều này có nghĩa là các chuỗi trong đó mỗi ký tự chỉ chiếm một byte. Vì vậy, nếu bạn chuyển một chuỗi vào btoa[]
chứa các ký tự chiếm nhiều hơn một byte, bạn sẽ gặp lỗi vì đây không được coi là dữ liệu nhị phân
const ok = "a";
console.log[ok.codePointAt[0].toString[16]]; // 61: occupies < 1 byte
const notOK = "✓";
console.log[notOK.codePointAt[0].toString[16]]; // 2713: occupies > 1 byte
console.log[btoa[ok]]; // YQ==
console.log[btoa[notOK]]; // error
Nếu bạn cần mã hóa văn bản Unicode dưới dạng ASCII bằng cách sử dụng btoa[]
, một tùy chọn là chuyển đổi chuỗi sao cho mỗi đơn vị 16 bit chỉ chiếm một byte. Ví dụ
// convert a Unicode string to a string in which
// each 16-bit unit occupies only one byte
function toBinary[string] {
const codeUnits = Uint16Array.from[
{ length: string.length },
[element, index] => string.charCodeAt[index]
];
const charCodes = new Uint8Array[codeUnits.buffer];
let result = "";
charCodes.forEach[[char] => {
result += String.fromCharCode[char];
}];
return result;
}
// a string that contains characters occupying > 1 byte
const myString = "☸☹☺☻☼☾☿";
const converted = toBinary[myString];
const encoded = btoa[converted];
console.log[encoded]; // OCY5JjomOyY8Jj4mPyY=
Nếu bạn làm điều này, tất nhiên bạn sẽ phải đảo ngược chuyển đổi trên chuỗi đã giải mã
function fromBinary[binary] {
const bytes = Uint8Array.from[{ length: binary.length }, [element, index] =>
binary.charCodeAt[index]
];
const charCodes = new Uint16Array[bytes.buffer];
let result = "";
charCodes.forEach[[char] => {
result += String.fromCharCode[char];
}];
return result;
}
const decoded = atob[encoded];
const original = fromBinary[decoded];
console.log[original]; // ☸☹☺☻☼☾☿
Xem thêm ví dụ về hàm
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
4 và const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
5 trong mục thuật ngữ Base64