Flutter 接收Mqtt发送的中文乱码问题解决

flutter连接上mqtt之后,后续问题:

1、中文乱码

 服务器返回的数据信息-------------{"timestamp":1617940176781,"statusDesc":"正常"}

如上面返回的json,statusDesc字段是中文,显示为乱码,最早采用的是先转码为字节数组,再转为String:

 final bytes = utf8.encode(payloadModel.statusDesc); //获取字节流
      final status = utf8.decode(bytes);

转为String后,再次打印status,发现仍然是乱码,此方法无效,后面考虑是否有可能是非utf编码格式,百度之后引入fast_gbk三方插件,该插件用法与上述用法一致:

final bytes = gbk.encode(payloadModel.statusDesc); //获取字节流
      final status = gbk.decode(bytes);

使用gbk转换之后,仍然是乱码,此时已经晚上八点半,知道的办法已经用尽。第二天早上,实在没办法,挨个尝试dart的String所有可能的api,直到发现一个codeUnits方法,查看源码得知codeUnits方法返回的也是一个字节流:

 /// An unmodifiable list of the UTF-16 code units of this string.
  List<int> get codeUnits;

此时灵机一动,直接将condeUnits返回的字节数组作为decode参数,来验证是否解码成功:

        log('statusDesc---------------${payloadModel.statusDesc}');
        status = utf8.decode(payloadModel.statusDesc.codeUnits);
        log('statusDesc---------------$status');

打印status效果:

I/flutter ( 3613): statusDesc---------------正常
I/flutter ( 3613): statusDesc---------------正常

大佬可能看一眼就解决了,可怜我这菜鸡研究了一晚上,后面经过对codeUnits方法的查询,得知Dart  String.codeUnits属性返回给定字符串的UTF-16代码单元列表,但是,前面用utf-8.encode编码不行,换成utf-16就行了?这是为什么,希望懂的大佬不吝赐教。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值