Flutter无法正常显示中文字符,浏览器却可正常显示的问题求助
Flutter中UTF8 JSON中文乱码解决方法
问题分析
Web服务器返回UTF8格式的JSON,浏览器能正常显示中文,但Flutter解析后显示乱码。核心原因是Flutter的http包默认用latin1编码解析响应内容,若服务器返回的Content-Type头未明确指定charset=utf-8,就会触发中文乱码;而浏览器会自动检测UTF8编码,因此能正常显示。
解决方案
1. 手动用UTF8解码响应字节流
修改loadData方法,直接解析响应的字节数组而非默认的response.body:
import 'dart:convert'; import 'package:http/http.dart' as http; void loadData() async { final response = await http.get( Uri.parse('http://192.168.0.8:88/searchcustomer'), headers: { "Content-type": "application/json", "Accept": "application/json", "Connection": "Keep-Alive", }, ); // 手动用UTF8解码字节流,避免乱码 String decodedBody = utf8.decode(response.bodyBytes); print(decodedBody); // 后续解析使用解码后的字符串 List<dataRecord> records = parseJson(decodedBody); }
2. 配置服务器响应头(推荐)
让服务器返回JSON时,在Content-Type头中明确指定字符编码:
Content-Type: application/json; charset=utf-8
配置后Flutter的http包会自动识别UTF8编码,无需手动解码,直接使用response.body即可正常解析中文。
验证
修改后重新运行代码,打印的响应内容应能正确显示"中國",后续解析到dataRecord的CHINESENAME字段也会正常展示中文。
内容的提问来源于stack exchange,提问作者Tony Lam
相关产品推荐
相关产品推荐

