btoa 只支持二进制字符串,要支持 UTF-8,可以参考:
https://github.com/develon2015/js/blob/main/src/web/encode/base64.ts/**
* 将 Blob 对象(File 基于 Blob)转换为 Base64 编码.
* @
param blob File 或`new Blob([string])`等 Blob 对象
*/
export async function Blob2Base64(blob: Blob): Promise<string> {
let arrayBuffer = await blob.arrayBuffer();
return ArrayBuffer2Base64(arrayBuffer);
}
/**
* 将 UTF-8 字符串编码为 Base64 字符串
* String => Blob => ArrayBuffer => Uint8Array => BinaryString => btoa()
* @
param str
*/
export async function String2Base64(str: string): Promise<string> {
return Blob2Base64(new Blob([str]));
}
export function ArrayBuffer2Base64(buffer: ArrayBuffer): string {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
// 将原始二进制数据按字节转换, 拼接为二进制字符串
for (var i = 0; i < len; i++) {
、、、