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字符内容。

最后给张截图:

相关推荐
计算机徐师兄2 分钟前
Java基于微信小程序的食堂线上预约点餐系统【附源码、文档说明】
java·微信小程序·食堂线上预约点餐系统小程序·食堂线上预约点餐微信小程序·java食堂线上预约点餐小程序·食堂线上预约点餐小程序·食堂线上预约点餐系统微信小程序
无心水1 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
奋斗的小青年!!1 小时前
Flutter与OpenHarmony深度协同:SnackBar组件的跨平台适配实战
flutter·harmonyos·鸿蒙
行者961 小时前
OpenHarmony Flutter跨平台开发:树形视图组件的实践与性能优化
flutter·性能优化·harmonyos·鸿蒙
一 乐8 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19928 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维8 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_999 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子9 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34169 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java