Flutter中如何将API返回的Unicode编码转为可读泰米尔语
解决Flutter中Unicode编码泰米尔语显示问题
方法1:修正Flask API的响应编码
Flask默认支持UTF-8,但建议显式设置响应的字符编码,避免转义问题:
from flask import Flask, jsonify app = Flask(__name__) @app.route('/tamil-content') def get_tamil_content(): tamil_text = "நம்பிக்கை வைக்கும் பேசும் உறவு வைக்கும் அன்பு தான் கிடைக்கும்" return jsonify({"content": tamil_text}), 200, {'Content-Type': 'application/json; charset=utf-8'}
方法2:Flutter端解码Unicode转义序列
如果API返回的是带\u前缀的转义字符串,用以下两种方式处理:
方式A:借助jsonDecode自动解码
import 'dart:convert'; String encodedStr = r"\u0ba8\u0b9f\u0bc1\u0ba8\u0bbf\u0bb2\u0bc8 \u0b85\u0ba9\u0bcd\u0baa\u0bbf\u0ba9\u0bcd"; // 将字符串包装为JSON结构后解码 String decodedStr = jsonDecode('{"val": "$encodedStr"}')["val"];
方式B:手动编写解码函数
String decodeUnicode(String encoded) { return encoded.replaceAllMapped(RegExp(r'\\u([0-9a-fA-F]{4})'), (match) { int charCode = int.parse(match.group(1)!, radix: 16); return String.fromCharCode(charCode); }); } // 使用示例 String encodedStr = r"\u0ba8\u0b9f\u0bc1\u0ba8\u0bbf\u0bb2\u0bc8 \u0b85\u0ba9\u0bcd\u0baa\u0bbf\u0ba9\u0bcd"; String decodedStr = decodeUnicode(encodedStr);
方法3:确保Flutter请求头部指定UTF-8
发送请求时,在请求头中明确声明接受UTF-8编码的响应:
import 'package:http/http.dart' as http; import 'dart:convert'; Future<String> fetchContent() async { final response = await http.get( Uri.parse('https://your-api-url/tamil-content'), headers: {'Accept': 'application/json; charset=utf-8'}, ); if (response.statusCode == 200) { Map<String, dynamic> data = jsonDecode(response.body); return data['content']; } throw Exception('Failed to load content'); }
内容的提问来源于stack exchange,提问作者Abishan Parameswaran
相关产品推荐
相关产品推荐

