dart 怎么支持gbk编码

#1

已有的服务端接口是使用gbk编码

获取服务端的响应数据可以使用gbk2utf8进行转换,但是提交的数据怎么将utf8转换成gbk?

import ‘package:gbk2utf8/gbk2utf8.dart’;
var str = ‘安’;
print(String.fromCharCodes(gbk.encode(str)));

使用以上的代码提交到服务器的数据是乱码

#2

首先,String.fromCharCodes应该是不适用于解码gbk.encode(str)的,应该使用gbk.decode;其次,根据gbk2utf8的readme ,gbk.encode得到的是中文编码的二进制流,那么数据的发送跟接收也都应该要是二进制流方式,不知这块你是怎么处理的。

此外,pub上还有另一个gbk库也可以看看: https://pub.dev/packages/gbk_codec

#3

import 'package:gbk_codec/gbk_codec.dart';
import 'dart:io';

  Future<String> post(String url, Map postData) async {
    HttpClient httpClient = new HttpClient();
    var uri = Uri.parse(url);
    var request = await httpClient.postUrl(uri);
    request.headers.add("Content-Type", "application/x-www-form-urlencoded");
    var querys = List();
    postData.forEach((k, v) {
      querys.add("$k=$v");
    });
    var bytes = gbk.encode(querys.join('&'));
    request.write(String.fromCharCodes(bytes));

    
    var response = await request.close();

    var data = '';
    if (response.statusCode == HttpStatus.ok) {
      await for (var contents in response) {
        data += gbk.decode(contents);
      }
    }
    print(data);
    return data;
  }

这是我目前的实现方式,使用gbk编码收发正常

1赞