uni-app 前端无法获取二维码原始二进制数据,因微信小程序不提供 rawdata 接口、h5 端 jsqr 仅返回解码字符串;需将图像传至后端,用 zxing 等库调用 getrawbytes() 解析。

uni-app 无法在前端直接读取二维码中的二进制数据——这不是写法问题,而是平台能力缺失导致的硬性限制。
微信小程序里 uni.scanCode 不返回原始二进制
调用 uni.scanCode 后,你拿到的是解码后的字符串(如 "https://example.com?id=123"),不是二维码图像的像素数据,更不是原始的 QR 码结构字节流。微信不暴露识别过程中的中间产物,res 对象里只有 result、scanType、charSet 这几个字段,没有 rawData 或 binaryPayload。
- 即使你传
{ scanType: ['qrCode'], onlyFromCamera: true },结果仍是纯文本 - 想拿到“扫码那一刻摄像头捕获的帧图”?小程序不提供
MediaStream或VideoFrame接口 - 尝试用
canvas捕获视频画面再toDataURL?微信 canvas 不支持从 video 元素 drawImage,且无getImageData
H5 端可抓帧但无法解析出二进制结构
H5 环境下能用 getUserMedia + canvas 抓到图像,也能用 jsQR 这类库识别内容,但它最终仍只返回解码后的字符串,而非 QR 码规范定义的原始数据编码(如 ECIs、structured append header、FNC1 字节等)。
-
jsQR的data字段是 UTF-8 解码后的字符串,不是原始字节数组 - 若二维码含非 UTF-8 数据(如 GBK 编码文本、自定义协议二进制载荷),
jsQR默认会乱码或失败 - 要提取原始字节,需改用底层解码器(如 ZXing 的
BinaryBitmap+QRCodeReader),但 uni-app H5 打包后常因 WebAssembly 加载失败或 Canvas 兼容问题崩溃
真正需要二进制 payload 时,只能走服务端 OCR+解码
如果你的业务强依赖二维码原始二进制结构(比如校验 CRC、解析私有协议头、提取未解码的 ECI 字段),唯一可靠路径是:把图片传给后端,由服务端完成完整 QR 解析流程。
- 前端用
uni.chooseImage或uni.canvasToTempFilePath获取图片临时路径 →uni.getFileSystemManager().readFile读成ArrayBuffer→uni.arrayBufferToBase64转 base64 发送 - 后端接收后,用 ZXing / libqrencode 等专业库解析,可访问
Result.getRawBytes()(ZXing Java)或qr_data->data(C 库)获取原始字节 - 注意:base64 传输会增大约 33% 体积,大图建议压缩或切片上传
别试图在小程序里 patch jsQR 或魔改 canvas;也别相信“用 wasm 加载 zxing.js 就能拿到 rawBytes”的 demo——它们在真机上大概率因内存限制、API 缺失或策略拦截而静默失败。二进制级 QR 解析不是前端该承担的事,交给后端才是稳态方案。











