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

Flutter调用Django后端API时阿拉伯语乱码,问题出在Flutter还是DRF?

阿拉伯语文本在Django后端与Flutter前端间显示异常问题排查

问题定位思路

先通过浏览器或curl工具直接访问API接口,快速判断问题来源:

  • 若浏览器中API返回的阿拉伯语文本乱码,问题出在Django REST Framework端
  • 若浏览器中显示正常,但Flutter端乱码,问题出在Flutter端

Django端排查要点

  1. 检查数据库字符集
    确保存储阿拉伯语的字段使用utf8mb4字符集(支持完整Unicode),需确认数据库表/列的collation设置为utf8mb4_unicode_ci。

  2. 验证响应编码
    查看API响应头的Content-Type是否包含charset=utf-8。DRF默认会配置,但也可在视图手动指定:

    from rest_framework.response import Response
    
    def your_view(request):
        data = {"arabic_text": "أهلاً"}
        return Response(data, content_type="application/json; charset=utf-8")
    
  3. 确认国际化配置
    在settings.py中确保:

    USE_I18N = True
    

Flutter端排查要点

  1. 正确解码响应体
    默认http.get返回的data.body可能因编码识别错误导致乱码,改用字节流显式解码UTF-8:

    import 'dart:convert';
    import 'package:http/http.dart' as http;
    
    final url = Uri.parse('http://127.0.0.1:8000');
    final data = await http.get(url);
    final body = utf8.decode(data.bodyBytes); 
    final flats = json.decode(body) as List<dynamic>;
    
  2. 确保文本显示方向正确
    阿拉伯语是RTL(从右到左)语言,显示时需指定文本方向:

    Text(
      flats[index]["arabic_field"],
      textDirection: TextDirection.rtl,
    )
    
  3. 注意控制台打印的局限性
    终端/控制台可能不支持阿拉伯语显示,即使数据正确,print(flats)也可能显示异常。建议通过Flutter DevTools查看变量实际值,或直接在UI中测试显示效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:34:39