HarmonyOS base64解码内容缺少

eyJzdWIiOiJjcG9uZ28xIiwiWC1BcHBJRCI6IkNTRE4tQVBQIiwiWC1EZXZpY2UtSUQiOiI4MDM4OTNjOC0xMDllLTQyOTYtOTExMi1lMjM4YWFjY2QxMjgiLCJYLVJpc2stQ29udHJvbC1OdW0iOiIwIiwiYXVkIjoicGFzc3BvcnQiLCJleHAiOjE3MTg4NDc2MjgsImlhdCI6MTcxNjI1NTYyOH0 
  • 1.

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

HarmonyOS
2024-12-27 15:26:45
浏览
收藏 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')
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

综上:

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

分享
微博
QQ
微信
回复
2024-12-27 16:54:31
相关问题
HarmonyOS base64解码
1014浏览 • 0回复 待解决
HarmonyOS base64解码报错
1989浏览 • 1回复 待解决
HarmonyOS 音频文件base64解码问题
1021浏览 • 1回复 待解决
HarmonyOS 图片Base64编码
847浏览 • 1回复 待解决
HarmonyOS 图片转base64
954浏览 • 1回复 待解决
HarmonyOS base64转image
778浏览 • 1回复 待解决
HarmonyOS base64编码问题
1410浏览 • 1回复 待解决
HarmonyOS Image加载base64失败
973浏览 • 1回复 待解决
HarmonyOS pixelMap怎么转base64
636浏览 • 1回复 待解决
照片文件转Base64
640浏览 • 1回复 待解决
HarmonyOS arraybuffer转base64乱码
879浏览 • 1回复 待解决
HarmonyOS base64编码的API
760浏览 • 1回复 待解决
HarmonyOS string怎么base64和decodeBase64
631浏览 • 1回复 待解决
HarmonyOS 如何做base64加密?
950浏览 • 1回复 待解决
HarmonyOS base64的PDF如何展示
462浏览 • 1回复 待解决
HarmonyOS @ohos/base64 (V2.0.0)
628浏览 • 1回复 待解决
HarmonyOS 录制的视频转base64
885浏览 • 1回复 待解决
HarmonyOS 图片进行base64编码报错
1393浏览 • 1回复 待解决
HarmonyOS 中文base64加密解密乱码
1370浏览 • 1回复 待解决