HarmonyOS base64解码内容缺少

eyJzdWIiOiJjcG9uZ28xIiwiWC1BcHBJRCI6IkNTRE4tQVBQIiwiWC1EZXZpY2UtSUQiOiI4MDM4OTNjOC0xMDllLTQyOTYtOTExMi1lMjM4YWFjY2QxMjgiLCJYLVJpc2stQ29udHJvbC1OdW0iOiIwIiwiYXVkIjoicGFzc3BvcnQiLCJleHAiOjE3MTg4NDc2MjgsImlhdCI6MTcxNjI1NTYyOH0 

我这边用HarmonyOS 的Base64Helper().encodeToStringSync 解码后的字符串 为啥会少最后一个 } 呢

HarmonyOS
19h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

在进行Base64Helper().encodeToStringSync编码时,如果最后剩余1或2个字节,则需要使用"="字符进行补齐。这意味着解码后的字符串可能不包含最后一个}字符

下面是测试案例,后台那面编码与你这面的解码格式应该不一致,俩端需要对其

// 测试示例

onPageShow(): void {

  // 解码
  let str = 'eyJzdWIiOiJjcG9uZ28xIiwiWC1BcHBJRCI6IkNTRE4tQVBQIiwiWC1EZXZpY2UtSUQiOiI4MDM4OTNjOC0xMDllLTQyOTYtOTExMi1lMjM4YWFjY2QxMjgiLCJYLVJpc2stQ29udHJvbC1OdW0iOiIwIiwiYXVkIjoicGFzc3BvcnQiLCJleHAiOjE3MTg4NDc2MjgsImlhdCI6MTcxNjI1NTYyOH0';
  // 来进行去除空格操作,然后使用以下操作进行处理:
  let noSpacesStr = str.replace(/\s/g, '');
  let base64 = new util.Base64Helper()
  let decoRes = base64.decodeSync(noSpacesStr, util.Type.BASIC);
  let textDecoder = util.TextDecoder.create('utf-8')
  str = textDecoder.decodeWithStream(decoRes)
  // 末尾缺少 “}”
  console.log('base64解码', str.toString())

  // 本地验证 编码/解码都ok
  let that = new util.Base64Helper();
  let buff = '{"sub":"cpongo1","X-AppID":"CSDN-APP","X-Device-ID":"803893c8-109e-4296-9112-e238aaccd128","X-Risk-Control-Num":"0","aud":"passport","exp":1718847628,"iat":171625562}';
  let strArray = new Uint8Array(buffer.from(buff).buffer)
  let result = that.encodeToStringSync(strArray, util.Type.MIME);
  console.log('Base64Helper--编码', result.toString())
  //来进行去除空格操作,然后使用以下操作进行处理
  let noSpaces = result.replace(/\s/g, '');
  let result2 = that.decodeSync(noSpaces, util.Type.MIME);
  buff = textDecoder.decodeWithStream(result2)
  console.log('Base64Helper--解码', buff.toString())

  console.log('main -onPageShow')
}

综上:

可能是因为在编码时,原始字符串中的最后一个字符是“}”,而 Base64 编码算法中使用“=”字符来填充编码结果,因此在编码时“}”字符被转换为 Base64 编码的“}”字符和一个“=”字符。在解码时,解码器会将“}”字符解码为原始字符,“=”字符被解码器忽略,因此解码结果中缺少了最后一个“}”字符,

分享
微博
QQ
微信
回复
17h前
相关问题
HarmonyOS base64解码报错
1072浏览 • 1回复 待解决
HarmonyOS base64解码
55浏览 • 0回复 待解决
HarmonyOS 音频文件base64解码问题
45浏览 • 1回复 待解决
HarmonyOS base64转image
84浏览 • 1回复 待解决
HarmonyOS base64编码问题
680浏览 • 1回复 待解决
HarmonyOS 图片转base64
131浏览 • 1回复 待解决
HarmonyOS 图片Base64编码
78浏览 • 1回复 待解决
HarmonyOS base64编码的API
221浏览 • 1回复 待解决
HarmonyOS arraybuffer转base64乱码
190浏览 • 1回复 待解决
HarmonyOS Image加载base64失败
45浏览 • 1回复 待解决
HarmonyOS 图片进行base64编码报错
736浏览 • 1回复 待解决
HarmonyOS 中文base64加密解密乱码
608浏览 • 1回复 待解决
HarmonyOS @ohos/base64 (V2.0.0)
0浏览 • 0回复 待解决
HarmonyOS string怎么base64和decodeBase64
74浏览 • 1回复 待解决
HarmonyOS 如何做base64加密?
31浏览 • 1回复 待解决
怎么把PixelMap图片转BASE64
9461浏览 • 1回复 待解决
HarmonyOS 图片操作,合成后导出base64
238浏览 • 1回复 待解决
HarmonyOS如何将图片转Base64
942浏览 • 1回复 待解决
HarmonyOS 加解密base64转换
43浏览 • 1回复 待解决