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

使用http客户端发起网络请求时接收emoji乱码如何正确解码

问题根因

你遇到的乱码是Dart http包默认解码规则导致的:当响应头Content-Type未明确指定charset=utf-8时,http包会默认使用Latin-1(ISO-8859-1)编码解析响应内容,emoji属于多字节Unicode字符,用Latin-1解析就会出现你看到的乱码字符。

修复方案

分两种常用处理方式:

1. 手动指定UTF-8解码(最稳妥,无需依赖服务端配置)

不要直接读取response.body,改为对响应字节流手动用UTF-8解码:

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

// 发起请求示例
final response = await http.get(Uri.parse('你的API接口地址'));
// 替换原直接读取body的逻辑,手动解码字节流
String responseContent = utf8.decode(response.bodyBytes);
// 此时responseContent中emoji可正常显示

2. 自动解码(需要服务端配合)

  • 发起请求时在请求头中添加Accept-Charset: utf-8,告知服务端优先返回UTF-8编码的内容
  • 要求服务端在响应头的Content-Type字段中明确标注charset=utf-8,例如Content-Type: application/json; charset=utf-8
    配置完成后http包会自动识别编码,直接读取response.body即可正常显示emoji。
发送请求注意事项

如果是你主动发送带emoji的请求,也需要在请求头明确标注编码,避免服务端接收乱码:

final response = await http.post(
  Uri.parse('你的API接口地址'),
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
  },
  body: jsonEncode({'content': '😚☺😚☺🤑🤑🤑'}),
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:02