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

如何在Flutter中正确显示来自API的特殊字符?

解决特殊字符显示为Unicode编码的问题

你的问题根源在于nestedDescriptionData是转义后的JSON字符串——外层json.decode仅解析了最外层的响应数据,但description字段内部的内容还保留着转义格式(比如\u00e6、"这类标记),用正则提取后自然不会自动解析这些转义序列。

正确处理方案

别用正则硬抠字段,直接把nestedDescriptionData当作JSON字符串二次解码,所有Unicode转义和转义引号都会被自动解析:

修改后的核心代码:

if (response.statusCode == 200) {
  var responseBody = await response.stream.bytesToString();
  final data = json.decode(responseBody);
  
  // 关键步骤:将description里的转义字符串二次解码为JSON对象
  final nestedDescriptionData = json.decode(data['response']['RESULT'][0]['description']);
  
  // 直接获取dn字段,无需正则提取
  final dnContent = nestedDescriptionData['dn']?.replaceAll(r'\n', '\n') ?? '';

  setState(() {
    _dnContent = dnContent;
  });
  _showWelcomeDialog(_dnContent);
}

为什么之前的尝试无效?

  • 添加Content-Type请求头没用:问题不在请求编码,而是响应里的嵌套JSON字符串未被正确解析。
  • 手动调用utf8.decode()出错:dnContent本身已是字符串,再用utf8解码会把它当作字节序列处理,导致乱码或无法显示。

内容的提问来源于stack exchange,提问作者I. Antonov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:55:01