Flutter调用Django后端API时阿拉伯语乱码,问题出在Flutter还是DRF?
阿拉伯语文本在Django后端与Flutter前端间显示异常问题排查
问题定位思路
先通过浏览器或curl工具直接访问API接口,快速判断问题来源:
- 若浏览器中API返回的阿拉伯语文本乱码,问题出在Django REST Framework端
- 若浏览器中显示正常,但Flutter端乱码,问题出在Flutter端
Django端排查要点
检查数据库字符集
确保存储阿拉伯语的字段使用utf8mb4字符集(支持完整Unicode),需确认数据库表/列的collation设置为utf8mb4_unicode_ci。验证响应编码
查看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")确认国际化配置
在settings.py中确保:USE_I18N = True
Flutter端排查要点
正确解码响应体
默认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>;确保文本显示方向正确
阿拉伯语是RTL(从右到左)语言,显示时需指定文本方向:Text( flats[index]["arabic_field"], textDirection: TextDirection.rtl, )注意控制台打印的局限性
终端/控制台可能不支持阿拉伯语显示,即使数据正确,print(flats)也可能显示异常。建议通过Flutter DevTools查看变量实际值,或直接在UI中测试显示效果。
内容的提问来源于stack exchange,提问作者mohamed hawas
相关产品推荐
相关产品推荐

