目标:手机nfc识别ic卡获取ic卡的信息; 问题:nfcA.transceive获取的结果ArrayBuffer解析成字符串乱码,用decodeURIComponent报错:url malformed 手机:华为p30,EMUI:11.0.0,安卓10 ps:使用名叫“nfc读写”的小程序识别卡片可以得到一个类似id的的信息,如AD2A04AF
代码如下:
const app = getApp();
var NFCAdapter = wx.getNFCAdapter();
Page({
data: {
id: ""
},
onShow() {
NFCAdapter.startDiscovery({
success: res => {
this.init();
},
fail: error => {
console.log(error)
}
})
},
str2ab(str) {
var buf = new ArrayBuffer(str.length * 2);
var bufView = new Uint16Array(buf);
for (var i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
},
init() {
NFCAdapter.onDiscovered(callback => {
if (callback.techs.includes(NFCAdapter.tech.nfcA)) {
const nfcA = NFCAdapter.getNfcA();
app.nfcA = nfcA;
nfcA.connect({
success: res => {
nfcA.transceive({
data: this.str2ab('GET DATA'),
success: res => {
console.log(res.data) //打印结果 <ArrayBuffer:byteLength=16>
let k = String.fromCharCode.apply(null, new Uint16Array(res.data));
console.log(k) // k为乱码
console.log(decodeURIComponent(escape(k))) // 这里报错:url malformed
},
fail: error => {
console.log(error)
}
})
}
})
}
})
},
})
你好,请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
代码片段:https://developers.weixin.qq.com/s/Sk6v2Qmm7KsK
(支持nfc的安卓手机,我用的是华为p30)运行代码,找个nfc的卡片识别,nfcA.transceive返回的结果ArrayBuffer解析成字符串乱码。
参考名字叫“nfc读写”的小程序,放上卡片显示一个类似卡号的字符串。
2. arraybuffer to hex string,是把字节数组用十六进制的形式打出来,这不可能乱码
3. transceive本身就是个裸写指令的接口,可能是写入的指令有误,也可能是读数据处理有误。
4. 如果只是为了拿卡片id,onDiscovered的回调里有id字段
所以“<ArrayBuffer:byteLength=16>” 这个是字符串的问题好像并没有被解决呢
https://developers.weixin.qq.com/s/Sk6v2Qmm7KsK