diff --git a/src/main/ets/utils/Base64Helper.ets b/src/main/ets/utils/Base64Helper.ets index e4f82ee..71da0a6 100644 --- a/src/main/ets/utils/Base64Helper.ets +++ b/src/main/ets/utils/Base64Helper.ets @@ -68,4 +68,70 @@ export class 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 + } } \ No newline at end of file