You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何将http响应中\x编码的UTF-8字符转换为可读字符串

问题原因

你在代码中静态声明的"\x5B"属于Dart语法层面的转义字符,编译阶段就会被转换为对应的ASCII字符[。而从HTML源码中提取的\x5B是4个独立的字面量字符(反斜杠、x、5、B),Dart不会自动识别这类转义序列,所以才会输出4个字符的runes值。

解决方案

你需要手动实现\xHH格式转义序列的解码逻辑,将所有匹配的子串转换为对应字符即可:

步骤1:实现转义解码函数

String decodeXEscapedString(String rawStr) {
  // 匹配所有\x加两位十六进制数的格式
  final xEscapeReg = RegExp(r'\\x([0-9a-fA-F]{2})');
  return rawStr.replaceAllMapped(xEscapeReg, (match) {
    // 将两位十六进制值转为对应字符
    int charCode = int.parse(match.group(1)!, radix: 16);
    return String.fromCharCode(charCode);
  });
}

步骤2:在原有逻辑中调用解码函数

修改你的代码中提取字符串后的处理部分:

//提取\x编码的JSON字符串
String dataJson = res.substring(start,end);
// 解码\x转义序列
String decodedJson = decodeXEscapedString(dataJson);

// 验证结果
String sample1 = decodedJson.substring(0,1);
String sample2 = "\x5B";  
print(sample2.runes);  // 输出 (91)   
print(sample1.runes);  // 输出 (91),符合预期

// 后续可正常解码JSON
final jsonResult = jsonDecode(decodedJson);

内容的提问来源于stack exchange,提问作者viks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:36:03