HarmonyOS base64解码内容缺少

eyJzdWIiOiJjcG9uZ28xIiwiWC1BcHBJRCI6IkNTRE4tQVBQIiwiWC1EZXZpY2UtSUQiOiI4MDM4OTNjOC0xMDllLTQyOTYtOTExMi1lMjM4YWFjY2QxMjgiLCJYLVJpc2stQ29udHJvbC1OdW0iOiIwIiwiYXVkIjoicGFzc3BvcnQiLCJleHAiOjE3MTg4NDc2MjgsImlhdCI6MTcxNjI1NTYyOH0 

我这边用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')
}

综上:

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

分享
微博
QQ
微信
回复
2024-12-27 16:54:31
相关问题
HarmonyOS base64解码
484浏览 • 0回复 待解决
HarmonyOS base64解码报错
1510浏览 • 1回复 待解决
HarmonyOS 音频文件base64解码问题
480浏览 • 1回复 待解决
HarmonyOS 图片Base64编码
511浏览 • 1回复 待解决
HarmonyOS base64转image
481浏览 • 1回复 待解决
HarmonyOS base64编码问题
1012浏览 • 1回复 待解决
HarmonyOS 图片转base64
544浏览 • 1回复 待解决
HarmonyOS pixelMap怎么转base64
229浏览 • 1回复 待解决
HarmonyOS Image加载base64失败
546浏览 • 1回复 待解决
照片文件转Base64
277浏览 • 1回复 待解决
HarmonyOS base64编码的API
465浏览 • 1回复 待解决
HarmonyOS arraybuffer转base64乱码
547浏览 • 1回复 待解决
HarmonyOS string怎么base64和decodeBase64
349浏览 • 1回复 待解决
HarmonyOS 如何做base64加密?
594浏览 • 1回复 待解决
HarmonyOS base64的PDF如何展示
174浏览 • 1回复 待解决
HarmonyOS 图片进行base64编码报错
1081浏览 • 1回复 待解决
HarmonyOS 录制的视频转base64
472浏览 • 1回复 待解决
HarmonyOS @ohos/base64 (V2.0.0)
276浏览 • 1回复 待解决
HarmonyOS 中文base64加密解密乱码
1004浏览 • 1回复 待解决