| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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;
- }
- 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
- }
- }
|