2024-10-31 12:23:46 +08:00
|
|
|
import { util } from '@kit.ArkTS';
|
|
|
|
|
|
|
|
|
|
export class Base64Helper {
|
|
|
|
|
private constructor() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 编码,通过输入参数编码后输出Uint8Array对象。
|
|
|
|
|
* @param array
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
static encode(array: Uint8Array): Promise<Uint8Array> {
|
|
|
|
|
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<string> {
|
|
|
|
|
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<Uint8Array> {
|
|
|
|
|
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;
|
|
|
|
|
}
|
2024-11-13 19:26:44 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
2024-10-31 12:23:46 +08:00
|
|
|
}
|