flutter将utf-8编码的字节序列转换为中英文字符串

这里遇到的问题是,我通过某种方式拿到了utf-8编码的字节序列,我只知道他们对应的是中英文字符。怎么将其转成中英文,并打印,让我对utf-8编码有了些许许的了解。

这里记录一下转换代码:

dart 复制代码
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字符内容。

最后给张截图:

相关推荐
梅子酱~9 分钟前
Vue 学习随笔系列二十二 —— 表格高度自适应
javascript·vue.js·学习
你的人类朋友13 分钟前
JS严格模式,启动!
javascript·后端·node.js
XiaoLeisj16 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
风象南17 分钟前
SpringBoot实现数据库读写分离的3种方案
java·spring boot·后端
Carlos_sam23 分钟前
OpenLayers:如何控制Overlay的层级?
前端·javascript
振鹏Dong24 分钟前
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
java·策略模式
ChinaRainbowSea33 分钟前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
雾月5533 分钟前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
melck1 小时前
liunx日志查询常用命令总结
java·服务器·网络
守护者1701 小时前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习