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

Flutter http.Response获取特殊字符出现乱码问题求助

问题原因

这是字符编码解析不匹配导致的乱码:服务器返回的内容是UTF-8编码,但http.Response.fromStream默认可能错误地使用单字节编码(比如ISO-8859-1)解析多字节的UTF-8字符,把UTF-8的每个字节单独当成一个字符处理,就出现了类似£、’这类乱码(比如£的UTF-8是两个字节0xC2 0xA3,用ISO-8859-1解析会拆成Â和£两个字符)。

解决方法

跳过http.Response.fromStream的默认解析逻辑,直接读取响应字节流并手动用UTF-8解码:

import 'package:http/http.dart' as http;
import 'dart:convert';

var streamedResponse = await request.send();
// 读取响应的全部字节
var bytes = await streamedResponse.stream.toBytes();
// 用UTF-8解码字节为字符串
var responseBody = utf8.decode(bytes);

如果需要保留完整的Response对象(比如获取状态码、响应头),可以手动构建:

import 'package:http/http.dart' as http;
import 'dart:convert';

var streamedResponse = await request.send();
var bytes = await streamedResponse.stream.toBytes();
var response = http.Response.bytes(
  bytes,
  streamedResponse.statusCode,
  headers: streamedResponse.headers,
  request: streamedResponse.request,
);
// 此时response.body为正确解析的UTF-8字符串

额外建议:检查服务器响应头的Content-Type是否包含charset=utf-8。如果服务器未返回该字段,客户端会默认使用单字节编码解析。若有权限修改服务器配置,建议在响应头明确指定Content-Type: text/plain; charset=utf-8(根据实际内容类型调整),从根源避免解析错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:10