HarmonyOS 鸿蒙Next SM3摘要转为string乱码
HarmonyOS 鸿蒙Next SM3摘要转为string乱码
对字符串进行sm3摘要计算,代码如下
let mdAlgName = ‘SM3’; // 摘要算法名
let md = cryptoFramework.createMd(mdAlgName);
// 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
await md.update({ data: new Uint8Array(buffer.from(‘dhweiuhdkjwhdjkhwqhdjw’, ‘utf-8’).buffer) });
let mdResult = await md.digest();
Logger.info(‘sm3 摘要结果:’ + mdResult.data);
1、使用如下方法将mdResult.data转化为string乱码
let textDecoder = util.TextDecoder.create(“utf-8”);
let str = textDecoder.decodeWithStream(mdResult.data, { stream: false })
2、使用如下方法转化正常
mdResult.data.forEach((value: number) => {
hexString += value.toString(16).padStart(2, ‘0’)
})
let mdAlgName = ‘SM3’; // 摘要算法名
let md = cryptoFramework.createMd(mdAlgName);
// 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
await md.update({ data: new Uint8Array(buffer.from(‘dhweiuhdkjwhdjkhwqhdjw’, ‘utf-8’).buffer) });
let mdResult = await md.digest();
Logger.info(‘sm3 摘要结果:’ + mdResult.data);
1、使用如下方法将mdResult.data转化为string乱码
let textDecoder = util.TextDecoder.create(“utf-8”);
let str = textDecoder.decodeWithStream(mdResult.data, { stream: false })
2、使用如下方法转化正常
mdResult.data.forEach((value: number) => {
hexString += value.toString(16).padStart(2, ‘0’)
})
2 回复
可以使用
buffer.from(mdResult.data).toString('hex')
相关文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-buffer-V5#bufferfrom
buffer.from(mdResult.data).toString('hex')
相关文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-buffer-V5#bufferfrom
在HarmonyOS鸿蒙系统中,当你遇到将Next SM3摘要转为字符串时出现乱码的问题,这通常与编码方式或字符集处理不当有关。Next SM3是一种哈希算法,其输出是固定长度的二进制数据。将这些二进制数据转换为可读的字符串时,需要选择合适的编码方式。
常见的问题可能包括:
-
编码方式不匹配:确保在将二进制数据转换为字符串时,使用的编码方式与原始数据的编码方式一致。例如,如果原始数据是以UTF-8编码的,那么在转换时也应使用UTF-8。
-
字节顺序问题:某些情况下,字节顺序(大端或小端)可能影响最终的字符串表示。检查并确保字节顺序在转换前后保持一致。
-
字符集限制:某些字符集可能不支持所有可能的字节值,这可能导致乱码。尝试使用更广泛的字符集,如UTF-8,它几乎可以表示所有可能的字符。
针对上述问题,你可以尝试调整编码方式或字符集设置,以确保正确地将Next SM3摘要转换为字符串。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html