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

Flutter中http.get获取波斯/阿拉伯字符内容出现乱码求助

Flutter中Http请求获取波斯/阿拉伯字符出现乱码的解决方案

我之前也碰到过类似的问题,其实这个乱码的根源是Flutter的http包默认用Latin1编码解析响应内容,但服务器返回的波斯/阿拉伯字符是UTF-8编码的,两者不匹配就导致了乱码(你看到的“Ø³ÙØ§Ù...”就是UTF-8字节被Latin1解码后的结果)。

解决办法:手动用UTF-8解码响应字节流

不要直接使用response.body,而是通过response.bodyBytes获取原始字节数组,再用utf8.decode()手动解码:

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

// 正确的请求示例
Future<void> fetchFarsiContent() async {
  final response = await http.get(Uri.parse('http://mobagym.com/media/mobagym-app-info/farsi.html'));
  
  if (response.statusCode == 200) {
    // 手动解码UTF-8字节流
    String content = utf8.decode(response.bodyBytes);
    print(content); // 现在会显示正确的波斯语:"سلام سلام لرم ایپسوم"
    // 后续可以把content传给Text Widget正常显示
  } else {
    throw Exception('Failed to load content');
  }
}

为什么添加请求头没用?

有些服务器并不会根据Accept-Charset请求头调整返回编码,或者返回的Content-Type头里没有明确标注charset=utf-8,但实际内容确实是UTF-8编码的。这种情况下,直接处理原始字节流是最可靠的方式,不需要依赖服务器的响应头。

额外说明

如果后续遇到其他编码的字符(比如GBK),可以对应使用dart:convert里的其他解码方法(比如gbk.decode(),需要额外依赖convert包),但波斯/阿拉伯语通常用UTF-8编码,所以用utf8.decode()就足够了。

内容的提问来源于stack exchange,提问作者behzad.robot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:10