蓝牙打印中文乱码
wx.writeBLECharacteristicValue
打印中文乱码,如题
wx.writeBLECharacteristicValue
打印中文乱码,如题
我的解决办法是再github上找到了这个大佬的开源项目。希望对大家有所帮助。
https://image.wxopen.club/content_9a57b93a-4697-11ea-8a8c-001a7dda7111.png
已解决。蓝牙打印机所支持的编码不同,处理的方法也不同
//混杂function hexStringToBuff(str){ //str='中国:WXHSH' const buffer = new ArrayBuffer((sumStrLength(str)) + 1) const dataView = new DataView(buffer) var data=str.toString(); var p = 0; //ArrayBuffer 偏移量 for(var i=0;i<data.length;i++){ if (isCN(data[i])){ //是中文 //调用GBK 转码 var t = gbk.$URL.encode(data[i]); for (var j = 0; j < 2; j++) { var temp = parseInt(t[j * 2] + t[j * 2 + 1], 16) dataView.setUint8(p++, temp) } }else{ var temp = parseInt(data.charCodeAt(i).toString(16), 16) dataView.setUint8(p++,temp) } } dataView.setUint8(p++, 0x0a) return buffer;}//计算arraybuffer的长度function sumStrLength(str){ var length=0; var data = str.toString(); for (var i = 0; i < data.length; i++) { if (isCN(data[i])) { //是中文 length += 2; } else { length += 1; } } return length;}//js正则验证中文function isCN(str){ if (/^[\u3220-\uFA29]+$/.test(str)) { return true; } else { return false; }}//汉字转码function hexStringToArrayBuffer(str){ const buffer = new ArrayBuffer((str.length / 2) + 1) const dataView = new DataView(buffer) for (var i = 0; i < str.length / 2; i++) { var temp = parseInt(str[i * 2] + str[i * 2 + 1], 16) dataView.setUint8(i, temp) } dataView.setUint8((str.length / 2), 0x0a) return buffer;}//不带有汉字function hexStringToArrayBufferstr(str){ let val = "" for (let i = 0; i < str.length; i++) { if (val === '') { val = str.charCodeAt(i).toString(16) } else { val += ',' + str.charCodeAt(i).toString(16) } } val += "," + "0x0a"; console.log(val) // 将16进制转化为ArrayBuffer return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })).buffer} |