import { util } from '@kit.ArkTS'; export class Base64Helper { private constructor() { } /** * 编码,通过输入参数编码后输出Uint8Array对象。 * @param array * @returns */ static encode(array: Uint8Array): Promise { let base64 = new util.Base64Helper(); return base64.encode(array); } /** * 编码,通过输入参数编码后输出Uint8Array对象。 * @param array * @returns */ static encodeSync(array: Uint8Array): Uint8Array { let base64 = new util.Base64Helper(); let result = base64.encodeSync(array); return result; } /** * 编码,通过输入参数编码后输出对应文本。 * @param array * @returns */ static encodeToStr(array: Uint8Array, options?: util.Type): Promise { let base64 = new util.Base64Helper(); return base64.encodeToString(array, options); } /** * 编码,通过输入参数编码后输出对应文本。 * @param array * @returns */ static encodeToStrSync(array: Uint8Array, options?: util.Type): string { let base64 = new util.Base64Helper(); let result = base64.encodeToStringSync(array, options); return result; } /** * 解码,通过输入参数解码后输出对应Uint8Array对象。 * @param array * @returns */ static decode(array: Uint8Array | string, options?: util.Type): Promise { let base64 = new util.Base64Helper(); return base64.decode(array, options); } /** * 解码,通过输入参数解码后输出对应Uint8Array对象。 * @param array * @returns */ static decodeSync(array: Uint8Array | string, options?: util.Type): Uint8Array { let base64 = new util.Base64Helper(); let result = base64.decodeSync(array, options); return result; } static baseEncode(str: string): string { return Base64Helper.base64Encode(Base64Helper.utf16to8(str)) } static base64Encode(str: string) { // 下面是64个基本的编码 let base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' let out: string let i: number let len: number let c1: number let c2: number let c3: number len = str.length i = 0 out = '' while (i < len) { c1 = str.charCodeAt(i++) & 0xff if (i === len) { out += base64EncodeChars.charAt(c1 >> 2) out += base64EncodeChars.charAt((c1 & 0x3) << 4) out += '==' break } c2 = str.charCodeAt(i++) if (i === len) { out += base64EncodeChars.charAt(c1 >> 2) out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)) out += base64EncodeChars.charAt((c2 & 0xF) << 2) out += '=' break } c3 = str.charCodeAt(i++) out += base64EncodeChars.charAt(c1 >> 2) out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)) out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)) out += base64EncodeChars.charAt(c3 & 0x3F) } return out } static utf16to8(str: string) { let out: string let i: number let len: number let c: number out = '' len = str.length for (i = 0; i < len; i++) { c = str.charCodeAt(i) if ((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i) } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)) out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)) out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)) } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)) out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)) } } return out } }