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