这里遇到的问题是,我通过某种方式拿到了utf-8编码的字节序列,我只知道他们对应的是中英文字符。怎么将其转成中英文,并打印,让我对utf-8编码有了些许许的了解。
这里记录一下转换代码:
String wifiName = \xE9\xA1\xBA\xE5\xBD\xB1VIP';
print("===========>>>>> orginal wifiName:$wifiName");
wifiName = decodeUtf8String(wifiName);
print("===========>>>>> after decode wifiName:$wifiName");处理函数:
String decodeUtf8String(String input) {List<int> bytes = [];int i = 0;while (i < input.length) {if (i + 3 < input.length && input.substring(i, i + 2) == r'\x') {String hex = input.substring(i + 2, i + 4);// 将十六进制字符转换为整数int byte = int.parse(hex, radix: 16);bytes.add(byte);i += 4;} else {// 处理非十六进制字符bytes.add(input.codeUnitAt(i));i++;}}// 使用 utf8.decode 方法将字节列表解码为字符串return utf8.decode(bytes);}
由于字符串中,是若干个以\x
打头且带有两个十六进制数的string(unicode码点)。所以,需要把这每个的十六进制数的编码部分,都依次转换为字节。后续再用utf8.decode
来解码。
思路:
1、遍历这个字符串;
2、如果检索到\x
这样的开头部分,就获取紧跟其后的两个十六进制数,并把它转成整数,然后添加到列表中;
3、如果没有检索到\x
开头的,就直接把它放到列表里;
4、最后,使用utf8.decode方法对这个列表作解码,就能得到其对应的unicode字符内容。
最后给张截图: