详细问题描述
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
官方示例蓝牙打印中文汉字乱码(并尝试过多种转码方式都不行),经测试安卓和IOS都是如此。
重现步骤
[步骤]
// 写入特征值数据
function writeValue(){
if(!deviceId){
plus.nativeUI.toast('未选择设备!');
return;
}
if(!bconnect){
plus.nativeUI.toast('未连接蓝牙设备!');
return;
}
if(!serviceId){
plus.nativeUI.toast('未选择服务!');
return;
}
if(!wcharacteristicId){
plus.nativeUI.toast('未选择写入的特征值!');
return;
}
var value = document.getElementById('writevalue').value;
if(!value || value==''){
plus.nativeUI.toast('请输入需要写入的数据');
document.getElementById('writevalue').focus();
return;
}
// 转换为ArrayBuffer写入蓝牙
str2ArrayBuffer(value, function(buffer){
outSet('写入蓝牙设备的特征值数据: ');
plus.bluetooth.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: wcharacteristicId,
value: buffer,
success: function(e){
outLine('写入数据成功!');
},
fail: function(e){
outLine('写入数据失败! '+JSON.stringify(e));
}
});
});
}
function str2ArrayBuffer(s,f) {
var b = new Blob([s],{type:'text/plain'});
var r = new FileReader();
r.readAsArrayBuffer(b);
r.onload = function(){if(f)f.call(null,r.result)}
}
IDE运行环境说明
[ HBuilderX ] 1.8.1
[mac版本号] macOS Mojave 10.14.3
App运行环境说明
[Android版本号] 8.0.0
[iOS版本号] 12.1.4
[手机型号] 小米5S、IPHONE 6S PLUS
联系方式
[QQ] 280189004
宸之虫 (作者)
感谢回复,已经解决!被【二进制】给扰乱,走了长时间的弯路。
1、在后台转换为指定字符集的字节数组:
String utf8String = "金";
byte[] arr = utf8String.getBytes("GBK");
将byte数组拼接成字符串,传递给前端,前端再分割组成JS数组传递给API即可:
2019-04-08 17:17
9***@qq.com
回复 宸之虫: 解决乱码。安卓的吗。楼主
2019-05-30 18:19
太2真人
回复 宸之虫: 我只能接到一个字符,我这边车蓝牙接受设备测试端只接到一个字符,用的是官方的实例
2019-11-25 16:50
太2真人
回复 宸之虫: 我只能接到一个字符,我这边车蓝牙接受设备测试端只接到一个字符,用的是官方的实例,。我也被二进制绕乱了。额
2019-11-25 17:39
太2真人
回复 宸之虫: 前端再分割组成JS数组传递给API即可:
这样蓝牙端也接不到数据啊
2019-11-25 17:40