HarmonyOS 鸿蒙Next util.Base64Helper().decodeSync(str) buffer.from(data).toString("utf-8"); 乱码

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

HarmonyOS 鸿蒙Next util.Base64Helper().decodeSync(str) buffer.from(data).toString(“utf-8”); 乱码

Tr8LkWkZ4L6hIexJ76tvQk1N152IbfhBxmvpfHn4KPvKG4Gkfd2fqdAer/QeqpUU

上面这个base64,使用下面方法解码后,是乱码,什么原因?API BUG?还是用法问题?

static utf8StringFromBase64String(str:string):string
{
try {
let data = new util.Base64Helper().decodeSync(str);
return buffer.from(data).toString(“utf-8”);
}
catch (e) {
Logs.error(“utf8StringFromBase64String faild:”+e)
return undefined
}
}

其中,上述代码中的 let data = new util.Base64Helper().decodeSync(str);,调试时,发现data值如下:

为什么  return buffer.from(data).toString(“utf-8”); 这一步就乱码了????

2 回复

你好,可以换一个方式,使用TextDecoder,代码如下

let d = util.TextDecoder.create('utf8', {
ignoreBOM: false
});
let s = d.decodeWithStream(data);

在HarmonyOS鸿蒙系统中,使用util.Base64Helper().decodeSync(str)解码Base64字符串后,再通过buffer.from(data).toString("utf-8")转换为UTF-8字符串时遇到乱码问题,通常是由于以下几个原因:

  1. Base64字符串不正确:确保输入的Base64字符串是完整且正确的,没有缺失或多余的字符。

  2. 字符编码不匹配:原始数据在编码为Base64之前可能不是UTF-8编码。如果原始数据是其他编码(如GBK、ISO-8859-1等),解码后直接按UTF-8处理会导致乱码。

  3. 数据损坏:在Base64编码或传输过程中,数据可能已被损坏。

解决方法:

  • 确认Base64字符串的完整性和正确性。
  • 检查原始数据的编码格式,确保在编码为Base64前与解码后使用的编码一致。
  • 如果可能,重新生成或获取正确的Base64编码字符串。

HarmonyOS鸿蒙Next学习地址https://www.itying.com/category-93-b0.html

回到顶部