Base64Helper.ets 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { util } from '@kit.ArkTS';
  2. export class Base64Helper {
  3. private constructor() {
  4. }
  5. /**
  6. * 编码,通过输入参数编码后输出Uint8Array对象。
  7. * @param array
  8. * @returns
  9. */
  10. static encode(array: Uint8Array): Promise<Uint8Array> {
  11. let base64 = new util.Base64Helper();
  12. return base64.encode(array);
  13. }
  14. /**
  15. * 编码,通过输入参数编码后输出Uint8Array对象。
  16. * @param array
  17. * @returns
  18. */
  19. static encodeSync(array: Uint8Array): Uint8Array {
  20. let base64 = new util.Base64Helper();
  21. let result = base64.encodeSync(array);
  22. return result;
  23. }
  24. /**
  25. * 编码,通过输入参数编码后输出对应文本。
  26. * @param array
  27. * @returns
  28. */
  29. static encodeToStr(array: Uint8Array, options?: util.Type): Promise<string> {
  30. let base64 = new util.Base64Helper();
  31. return base64.encodeToString(array, options);
  32. }
  33. /**
  34. * 编码,通过输入参数编码后输出对应文本。
  35. * @param array
  36. * @returns
  37. */
  38. static encodeToStrSync(array: Uint8Array, options?: util.Type): string {
  39. let base64 = new util.Base64Helper();
  40. let result = base64.encodeToStringSync(array, options);
  41. return result;
  42. }
  43. /**
  44. * 解码,通过输入参数解码后输出对应Uint8Array对象。
  45. * @param array
  46. * @returns
  47. */
  48. static decode(array: Uint8Array | string, options?: util.Type): Promise<Uint8Array> {
  49. let base64 = new util.Base64Helper();
  50. return base64.decode(array, options);
  51. }
  52. /**
  53. * 解码,通过输入参数解码后输出对应Uint8Array对象。
  54. * @param array
  55. * @returns
  56. */
  57. static decodeSync(array: Uint8Array | string, options?: util.Type): Uint8Array {
  58. let base64 = new util.Base64Helper();
  59. let result = base64.decodeSync(array, options);
  60. return result;
  61. }
  62. static baseEncode(str: string): string {
  63. return Base64Helper.base64Encode(Base64Helper.utf16to8(str))
  64. }
  65. static base64Encode(str: string) {
  66. // 下面是64个基本的编码
  67. let base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  68. let out: string
  69. let i: number
  70. let len: number
  71. let c1: number
  72. let c2: number
  73. let c3: number
  74. len = str.length
  75. i = 0
  76. out = ''
  77. while (i < len) {
  78. c1 = str.charCodeAt(i++) & 0xff
  79. if (i === len) {
  80. out += base64EncodeChars.charAt(c1 >> 2)
  81. out += base64EncodeChars.charAt((c1 & 0x3) << 4)
  82. out += '=='
  83. break
  84. }
  85. c2 = str.charCodeAt(i++)
  86. if (i === len) {
  87. out += base64EncodeChars.charAt(c1 >> 2)
  88. out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4))
  89. out += base64EncodeChars.charAt((c2 & 0xF) << 2)
  90. out += '='
  91. break
  92. }
  93. c3 = str.charCodeAt(i++)
  94. out += base64EncodeChars.charAt(c1 >> 2)
  95. out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4))
  96. out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6))
  97. out += base64EncodeChars.charAt(c3 & 0x3F)
  98. }
  99. return out
  100. }
  101. static utf16to8(str: string) {
  102. let out: string
  103. let i: number
  104. let len: number
  105. let c: number
  106. out = ''
  107. len = str.length
  108. for (i = 0; i < len; i++) {
  109. c = str.charCodeAt(i)
  110. if ((c >= 0x0001) && (c <= 0x007F)) {
  111. out += str.charAt(i)
  112. } else if (c > 0x07FF) {
  113. out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F))
  114. out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F))
  115. out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
  116. } else {
  117. out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F))
  118. out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
  119. }
  120. }
  121. return out
  122. }
  123. }