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
相关产品推荐
相关产品推荐

