uni-app uni.scanCode识别二维码结果乱码

uni-app uni.scanCode识别二维码结果乱码

操作步骤:

  • 使用uni.scanCode识别二维码,返回结果在安卓app上乱码,但是小程序正常,可在dcloud官方app端、微信小程序端的hello uni-app工程中分析错误原因

预期结果:

{
"result": "成品号:X23B67753800002合同号:P3SB991618牌号:P280VK规格:1.2*1130C净重:11670Kg品名:普冷卷表面组别:FB表面结构:麻面生产日期:2023-10-06订单号:熔炼号:X23207842",
"charSet": "ISO8859_1",
"path": "",
"scanType": "QR_CODE",
"errMsg": "scanCode:ok"
}

实际结果:

{
"result": "ウノニキコナ:X23B67753800002\nコマヘャコナ:P3SB991618\nÅÆºÅ:P280VK\n¹æ¸ñ:1.2*1130C\n¾»ÖØ:11670Kg\nÆ·Ãû:ÆÕÀä¾í\n±íÃæ×é±ð:FB\n±íÃæ½á¹¹:ÂéÃæ\nÉú²úÈÕÆÚ:2023-10-06\n¶©µ¥ºÅ:\nÈÛÁ¶ºÅ:X23207842",
"charSet": "ISO8859_1",
"path": "",
"scanType": "QR_CODE",
"errMsg": "scanCode:ok"
}

bug描述:

  • 使用uni.scanCode识别二维码,返回结果在安卓app上乱码,但是小程序正常,可在dcloud官方app端、微信小程序端的hello uni-app工程中分析错误原因

Image

环境信息

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 10
HBuilderX类型 正式
HBuilderX版本 3.8.12
手机系统 Android
手机系统版本 Android 7.0
手机厂商 华为
手机机型 安卓
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app uni.scanCode识别二维码结果乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

这个bug应该是已经修复了。 alpha貌似是可以了。 如果觉得扫码不准确,可以用支付宝的扫码插件 https://ext.dcloud.net.cn/plugin?id=2636

更多关于uni-app uni.scanCode识别二维码结果乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html


3.92.2023101106-alpha并没有修复,结果还是如此

回复 4***@qq.com: 用支付宝那个吧,那个也比较精确,,这个原装的,我也就开始用了下,但是好多都识别不出来。支付宝那个也很简单

根本就没解决呀,新增的参数没有用

试试自己转换 引入库 iconv-lite buffer
uni.scanCode({ scanType: [“qrCode”], success: (res) => { if (res.charSet == “ISO8859_1”) { console.log(iconv.decode(res.result, “GBK”)); } }, });

app上没法用这个库诶

回复 4***@qq.com: 您好 请问的你的问题解决了吗 我现在也遇到同样的问题

这是一个典型的字符编码问题。在安卓平台上,uni.scanCode返回的二维码内容被错误地按照ISO8859_1编码解析,而实际内容应该是UTF-8编码。

解决方案:

  1. 可以尝试手动转换编码:
const res = await uni.scanCode()
let result = res.result
if(res.charSet === 'ISO8859_1') {
    result = decodeURIComponent(escape(result))
}
  1. 或者检查二维码生成时是否使用了特殊编码,建议统一使用UTF-8编码生成二维码。

  2. 也可以尝试在调用scanCode时指定编码:

uni.scanCode({
    scanType: ['qrCode'],
    success: (res) => {
        console.log(res)
    },
    fail: (err) => {
        console.error(err)
    },
    encoding: 'UTF-8' // 尝试指定编码
})
回到顶部