这两天在处理一个基于微信小程序的蓝牙传输数据,遇到的问题简单总结:
- 微信对IOS/Android兼容真是让人头疼,可能经常遇到的就是onBLECharacteristicValueChange 部分安卓手机不回调的问题。
- 向安卓手机写入数据时writeBLECharacteristicValue 报10008的问题.
- 另外就是中文乱码问题了。
其他问题其实解决方案很多了,可以异步或延时等方式来处理,中文乱码方案也不少,今天就说一下我找到的解决方法.
之前中文乱码在Java、C 、Python、PHP等后端语言处理是非常简单的。前端就稍微复杂一点,幸好有大能已经开源可以直接使用。
我们知道蓝牙设备传输数据都是二进制,所以事先需要对字符串进行转码.
按位转码的过程中进行正则判断是否是中文: /^[\u3220-\uFA29] $/.test(str)
是中文,我就需要借助gbk库进行转码具体如下:
for (var i = 0,arr=[]; i < str.length; i ) {
if (/^[\u3220-\uFA29] $/.test(str[i])) {
var t = gbk.encode(str[i]);
for (var j = 0; j < 2; j ) {
var code = t[j * 3 1] t[j * 3 2];
var temp = parseInt(code, 16)
arr.push(temp)
}
} else {
arr.push(str.charCodeAt(i));
}