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

Flutter如何正确显示BIG5编码JSON中的字符?

解决BIG5编码JSON字符的正确显示问题

问题描述

我希望从由Capesoft NetTalk服务(基于SoftVelocity Clarion Web服务器生成)返回的JSON中正确显示BIG5编码的字符,该怎么做?现有Flutter处理代码如下:

List<dataRecord> parseJson(String responseBody) {
    final parsed =
        convert.jsonDecode(responseBody).cast<Map<String, dynamic>>();
    return parsed.map<dataRecord>((json) => dataRecord.fromJson(json)).toList();
  }

  Future<List<dataRecord>> fetchData(http.Client client) async {
    isLoading = true;
    print(widget.clientID.toString());
    final response = await client.get(
      Uri.parse('some_api'),
      headers: {
        "Content-type": "application/json",
        "Accept": "application/json",
        "Connection": "Keep-Alive",
      },
    );
    return parseJson(response.body);
  }

解决方案

1. 引入BIG5解码依赖

Dart标准库未内置BIG5编码解码器,需借助第三方包charset_converter处理字节转字符串的编码转换。在pubspec.yaml中添加依赖:

dependencies:
  charset_converter: ^2.1.1

执行flutter pub get完成依赖安装。

2. 修改请求解码逻辑

Flutter的http包默认会将响应按UTF-8解码,直接使用response.body会导致BIG5字符乱码。需先获取原始字节流,再用BIG5编码解码为Dart字符串后再解析JSON:

import 'package:charset_converter/charset_converter.dart';

List<dataRecord> parseJson(String responseBody) {
  final parsed = convert.jsonDecode(responseBody).cast<Map<String, dynamic>>();
  return parsed.map<dataRecord>((json) => dataRecord.fromJson(json)).toList();
}

Future<List<dataRecord>> fetchData(http.Client client) async {
  isLoading = true;
  print(widget.clientID.toString());
  final response = await client.get(
    Uri.parse('some_api'),
    headers: {
      "Content-type": "application/json",
      "Accept": "application/json",
      "Accept-Charset": "big5", // 明确告知服务器返回BIG5编码
      "Connection": "Keep-Alive",
    },
  );
  
  // 将BIG5编码的原始字节转换为Dart支持的Unicode字符串
  String decodedString = await CharsetConverter.decode("BIG5", response.bodyBytes);
  
  return parseJson(decodedString);
}

3. UI层直接显示

经过上述解码后,JSON中的BIG5字符已转换为Dart内部的Unicode字符串,直接在Text组件中使用即可正常显示,无需额外处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:30:21