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

