HarmonyOS 鸿蒙Next base64解码报错

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next base64解码报错

let codeResult: TCommonResult<ImgCodeResult> = JSON.parse(data);

let base64Code: string = codeResult.data!.validCode;

PiccLog.debug("base64Code = " + base64Code)

let base64Utils = new util.Base64Helper();

let uint8Array: Uint8Array = base64Utils.decodeSync(base64Code, util.Type.BASIC);

// let uint8Array:Uint8Array = base64Utils.decodeSync(base64Code, util.Type.MIME);  

使用base64解码报错,报错信息如下:  Error name:Error Error message:The input string contains unsupported characters Error code:-1 Stacktrace: at decodeSync (/usr1/hmos_for_system/src/increment/sourcecode/out/generic_generic_arm_64only/hisi_all_phone_standard/obj/commonlibrary/ets_utils/js_util_module/util/util_js.js:63:63) 后台返回的图片为base64转码的字符串,需要进行解码。

2 回复

根据报错信息提示:输入字符串包含不支持的字符,可以先把字符串处理一下,参考以下demo:

// 字符串转成字节流
function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
// 字节流转成可理解的字符串
function uint8ArrayToString(array: Uint8Array): string {
  // 将UTF-8编码转换成Unicode编码
  let out: string = "";
  let index: number = 0;
  let len: number = array.length;
  while (index < len) {
    let character = array[index++];
    switch (character >> 4) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
        out += String.fromCharCode(character); 
        break;
      case 12:
      case 13:
        out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
        break;
      case 14:
        out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
        break;
      default:
        break;
    }
  }
  return out;
}
function doDecryption(encodeString: string) {
  let base64_ = new util.Base64Helper();
  let decodeArr: Uint8Array = base64_.decodeSync(encodeString);
  let decodeStr = uint8ArrayToString(decodeArr);
  log.info('doEncrypted, decodeArr: ' + decodeArr);
  log.info('doEncrypted, decodeStr: ' + decodeStr);
} 

针对您提到的HarmonyOS鸿蒙系统中Next base64解码报错的问题,这通常涉及几种可能的原因:

  1. 输入数据错误:确保输入给base64解码函数的字符串是有效的base64编码。base64编码字符串应仅包含A-Z, a-z, 0-9, +, /和=(填充字符),且长度应为4的倍数(如果不加填充字符的话)。

  2. 编码/解码库不一致:检查您用于编码和解码的库是否来自同一来源或遵循相同标准。不同库可能有细微差异,导致兼容性问题。

  3. 内存或资源限制:鸿蒙系统可能因资源限制(如内存不足)导致解码操作失败。确保系统有足够的资源来处理解码任务。

  4. API使用错误:检查API调用是否正确,包括参数传递和错误处理。确保遵循HarmonyOS官方文档中的指导。

  5. 系统或库版本问题:确认您的鸿蒙系统版本和使用的库版本是否支持您正在尝试的操作。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。在那里,您可以获得更专业的技术支持。

回到顶部