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 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就行了?这是为什么,希望懂的大佬不吝赐教。

 

你可能感兴趣的:(Flutter)