如何解决HarmonyOS鸿蒙Next中生成的二维码无法使用的问题
如何解决HarmonyOS鸿蒙Next中生成的二维码无法使用的问题
【问题现象】
在HarmonyOS中生成二维码异常,生成的二维码无法使用。应用的业务逻辑主要分2步:
- 把后端返会的base64字符串解码。
- 根据解码后的byte数组生成二维码。
let content = "AQDwAUUBAAIZAAAAAAABBJWHOWbBlc8AHgOj0dsvCpdMZpMy3f+3+887rj5/ydMF+V50PqwhbHkSoZAgAAAAZrRmzyACrsxSAWIgAQEBAQEBAAAAAJiWfwAAAAAAAAAAAAAAAAoAAFlCQgAAAAAAJLChYJ0Mi0Pw/wSMZ8D2ByTDvmtxRinyNDCP0+VzsVoTaaXIcfNv4i8Ru6P3uHWjCVGUS3WE8faSSpdnkLgnGa0Zs/bnwae2W8jT5krtgt2I4c+yg691kbq8zcYBEOmvioBUZ6B6e9D1c5jc3N0FmQsO0SAXVu0U4CMSao4xBxgIg+m";
// base64 字符串解码
let that = new util.Base64Helper();
let uArrayRes = that.decodeSync(content,util.Type.MIME)
let str = buffer.from(uArrayRes.buffer).toString()
// ISO-8859-1 编码
let textEncoder = new util.TextEncoder('iso-8859-1')
let res = textEncoder.encodeInto(str)
let resStr = buffer.from(res.buffer).toString()
let options: generateBarcode.CreateOptions = {
scanType: scanCore.ScanType.QR_CODE,
height: 800,
width: 800,
level: generateBarcode.ErrorCorrectionLevel.LEVEL_Q
}
// 码图生成接口,成功返回PixelMap格式图片
generateBarcode.createBarcode(resStr, options)
按照以上代码生成后的二维码如下图,需要通过二维码读取字符串的二进制字节信息,扫码后得到是字符串信息。最终通过的扫码设备无法识别,说明二维码生成失败。
【背景知识】
根据指定编码格式的字符串,创建新的Buffer对象。
注意 generateBarcode目前不支持在模拟器上运行。
【定位思路】
修改转码方式为:
buffer.from(str, 'latin1').buffer;
入参由字符串改为ArrayBuffer,成功生成预期码图:
【解决方案】
ISO-8859-1编码采用buffer.from操作转为二进制数据,不再通过textEncoder.encodeInto,其中Latin1是ISO-8859-1的别名, 向下兼容ASCII格式。
buffer.from(buffer: Buffer | Uint8Array): Buffer
buffer.from(string: String, encoding?: BufferEncoding): Buffer
// base64 字符串解码
let that = new util.Base64Helper();
let uArrayRes = that.decodeSync(content,util.Type.MIME)
// ISO-8859-1 编码
let str = buffer.from(uArrayRes.buffer).toString()
let contentBuffer: ArrayBuffer = buffer.from(str, 'latin1').buffer;
let options: generateBarcode.CreateOptions = {
scanType: scanCore.ScanType.QR_CODE,
height: 800,
width: 800,
level: generateBarcode.ErrorCorrectionLevel.LEVEL_Q
}
// 码图生成接口,成功返回PixelMap格式图片
generateBarcode.createBarcode(contentBuffer, options)
更多关于如何解决HarmonyOS鸿蒙Next中生成的二维码无法使用的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于如何解决HarmonyOS鸿蒙Next中生成的二维码无法使用的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中生成的二维码无法使用,可能由以下原因导致:
-
二维码生成参数错误:检查生成二维码时传入的参数是否正确,如URL、文本等。参数错误会导致二维码无法识别。
-
二维码尺寸问题:二维码尺寸过小或过大可能影响扫描设备的识别。确保二维码尺寸适中,符合标准。
-
二维码容错率设置不当:容错率过低可能导致二维码在部分损坏时无法识别。适当提高容错率(如设置为30%)可增强二维码的鲁棒性。
-
二维码生成库版本问题:使用的二维码生成库可能存在兼容性问题或Bug。确保使用最新版本的库,或尝试更换其他库进行生成。
-
设备扫描问题:部分设备可能对二维码的格式或内容有特定要求。确保生成的二维码符合目标设备的扫描标准。
-
二维码内容编码问题:二维码内容编码方式不正确可能导致无法识别。确保使用正确的编码方式(如UTF-8)。
-
二维码生成环境问题:生成二维码的环境可能存在异常,如内存不足、权限问题等。检查生成环境是否正常。
-
二维码显示问题:二维码在显示时可能被压缩、变形或遮挡,影响识别。确保二维码在显示时保持清晰、完整。
通过逐一排查上述问题,可以有效解决HarmonyOS鸿蒙Next中生成的二维码无法使用的情况。