/**
|
* 字符串(含中文)转 Base64 编码
|
* @param {string} str - 要转换的字符串
|
* @returns {string} Base64 编码结果
|
*/
|
export function stringToBase64(str) {
|
// 步骤1:将字符串转为 UTF-8 编码的二进制数据
|
const utf8Bytes = new TextEncoder().encode(str);
|
// 步骤2:将二进制数据转为 ASCII 字符串(避免 btoa 报错)
|
let asciiStr = '';
|
for (let i = 0; i < utf8Bytes.length; i++) {
|
asciiStr += String.fromCharCode(utf8Bytes[i]);
|
}
|
// 步骤3:转 Base64
|
return btoa(asciiStr);
|
}
|
|
/**
|
* Base64 编码转回字符串(含中文)
|
* @param {string} base64Str - Base64 编码字符串
|
* @returns {string} 原字符串
|
*/
|
export function base64ToString(base64Str) {
|
// 步骤1:Base64 解码为 ASCII 字符串
|
const asciiStr = atob(base64Str);
|
// 步骤2:将 ASCII 字符串转回 UTF-8 二进制数据
|
const utf8Bytes = new Uint8Array(asciiStr.length);
|
for (let i = 0; i < asciiStr.length; i++) {
|
utf8Bytes[i] = asciiStr.charCodeAt(i);
|
}
|
// 步骤3:解码为原字符串
|
return new TextDecoder().decode(utf8Bytes);
|
}
|