Flutter中API返回孟加拉语显示乱码问题求助
解决Flutter中孟加拉语文本乱码问题
乱码本质是字符编码不匹配或字体不支持导致的,以下是针对性解决步骤:
1. 确认接口响应编码
先检查接口返回的Content-Type响应头,确认是否包含charset=utf-8。如果接口未指定编码,大概率用了ISO-8859-1这类不兼容非拉丁字符的编码。
- 可以用命令行工具验证:
curl -I 你的接口地址,查看输出中的Content-Type字段。
2. 强制用UTF-8解析响应
不管接口是否指定编码,手动用UTF-8解码响应字节是最稳妥的方式:
使用http包
import 'dart:convert'; import 'package:http/http.dart' as http; Future<void> fetchBanglaData() async { final response = await http.get(Uri.parse('你的接口地址')); // 直接解码字节为UTF-8字符串 final decodedBody = utf8.decode(response.bodyBytes); // 再解析JSON或处理文本 final data = jsonDecode(decodedBody); }
使用dio包
import 'package:dio/dio.dart'; final dio = Dio(); Future<void> fetchBanglaData() async { final response = await dio.get('你的接口地址', responseType: ResponseType.bytes); final decodedBody = utf8.decode(response.data as List<int>); final data = jsonDecode(decodedBody); }
3. 配置孟加拉语支持字体
如果编码正确但仍显示方块/乱码,是系统默认字体不支持孟加拉语字符:
- 下载支持孟加拉语的字体(如Noto Sans Bengali、SolaimanLipi),放入项目
assets/fonts目录; - 在
pubspec.yaml中注册字体:
flutter: fonts: - family: NotoSansBengali fonts: - asset: assets/fonts/NotoSansBengali-Regular.ttf
- 在Text组件中指定字体:
Text( data['bangla_text'], style: TextStyle(fontFamily: 'NotoSansBengali'), )
4. 修复编码转换错误
如果已经拿到乱码字符串,尝试反向转换编码:
// 假设乱码是ISO-8859-1编码的UTF-8内容 String garbled = '¦®à¦¾à¦²à¦¿à¦à¦¾à¦¨à¦¾à¦§à§à¦¨'; List<int> bytes = latin1.encode(garbled); String correctText = utf8.decode(bytes);
内容的提问来源于stack exchange,提问作者Tanjit Shakil
相关产品推荐
相关产品推荐

