gpt4 book ai didi

dart - 解码base64 API响应将引发FormatException

转载 作者:行者123 更新时间:2023-12-03 04:13:21 25 4
gpt4 key购买 nike

我正在使用的API返回以下Base64,UTF8数据。

H4sIAAAAAAAEAIXS3WvCMBAA8H8l5MmB9Wtf2idtJ86HDrHKNsYeYntrgzUpl2RQpf/7UsExsXZvCcf97ri7A0XQBsUT04y6BzoGRIlAXUrbFDIQkZx+g9D8GBR4+tChjY8NZgvOtGZfEnc2n6Za58rtdk3EOwnoQhqEKqMjRcYFVGb1ldT9sByPf7l+xcWgIuR7LkXVwKDXH5G1PyfByiOvErOY+Cnb5TasUp4rskBQNh1isilIABiBBRwPxJ60Aik0CRm3YTIRAhx/8nJDy/Z51duGqkvJ4tqyrXeJW/tEcGbe8hK9a0DXuGGiXvVTEElsHP+5ptH7OnPQO5p+EWWS+CiVqpMvrIcr1vkEj4OXRmg7Q+LxLZxsk1+Ijw3decEbCU1u7b8N1iDDBmSFLNr+fwMrrpTUpOUB2mtzZtOa7Ywaylxf+YQnGTgBQ80TUZBwPbfyZ1mWP1eCbD1AAwAA


我编写了以下测试,将其转换为UTF8 Json字符串。
void main() {
const data = "H4sIAAAAAAAEAIXS3WvCMBAA8H8l5MmB9Wtf2idtJ86HDrHKNsYeYntrgzUpl2RQpf/7UsExsXZvCcf97ri7A0XQBsUT04y6BzoGRIlAXUrbFDIQkZx+g9D8GBR4+tChjY8NZgvOtGZfEnc2n6Za58rtdk3EOwnoQhqEKqMjRcYFVGb1ldT9sByPf7l+xcWgIuR7LkXVwKDXH5G1PyfByiOvErOY+Cnb5TasUp4rskBQNh1isilIABiBBRwPxJ60Aik0CRm3YTIRAhx/8nJDy/Z51duGqkvJ4tqyrXeJW/tEcGbe8hK9a0DXuGGiXvVTEElsHP+5ptH7OnPQO5p+EWWS+CiVqpMvrIcr1vkEj4OXRmg7Q+LxLZxsk1+Ijw3decEbCU1u7b8N1iDDBmSFLNr+fwMrrpTUpOUB2mtzZtOa7Ywaylxf+YQnGTgBQ80TUZBwPbfyZ1mWP1eCbD1AAwAA";

test('Base64 decoder', () {
final bytes = base64.decode(data);

String jsonString;
try {
jsonString = utf8.decode(bytes);
} catch (e) {
// ignore: avoid_print
print(e);
}

// ignore: avoid_print
print("$jsonString\n");

final decoded = json.decode(jsonString);
// ignore: avoid_print
print("$decoded\n");
expect(decoded, !null);
});
}
从base64字符串解码得到的字节对我来说看起来不错,但是当我尝试 utf8.decode()这些字节时。我得到 FormatException,或者,如果我添加 allowMalformed = true,则是一个无意义的字符串。
如何正确解码Json字符串?

最佳答案

您的BASE64输入是GZip压缩的JSON字符串。以下程序将起作用:

import 'dart:convert';
import 'dart:io';

void main() {
const data = "H4sIAAAAAAAEAIXS3WvCMBAA8H8l5MmB9Wtf2idtJ86HDrHKNsYeYntrgzUpl2RQpf/7UsExsXZvCcf97ri7A0XQBsUT04y6BzoGRIlAXUrbFDIQkZx+g9D8GBR4+tChjY8NZgvOtGZfEnc2n6Za58rtdk3EOwnoQhqEKqMjRcYFVGb1ldT9sByPf7l+xcWgIuR7LkXVwKDXH5G1PyfByiOvErOY+Cnb5TasUp4rskBQNh1isilIABiBBRwPxJ60Aik0CRm3YTIRAhx/8nJDy/Z51duGqkvJ4tqyrXeJW/tEcGbe8hK9a0DXuGGiXvVTEElsHP+5ptH7OnPQO5p+EWWS+CiVqpMvrIcr1vkEj4OXRmg7Q+LxLZxsk1+Ijw3decEbCU1u7b8N1iDDBmSFLNr+fwMrrpTUpOUB2mtzZtOa7Ywaylxf+YQnGTgBQ80TUZBwPbfyZ1mWP1eCbD1AAwAA";

final bytes = base64.decode(data);

String jsonString;
try {
jsonString = utf8.decode(GZipCodec().decode(bytes));
} catch (e) {
// ignore: avoid_print
print(e);
}

// ignore: avoid_print
print("$jsonString\n");

final dynamic decoded = json.decode(jsonString);
// ignore: avoid_print
print("$decoded\n");
}
返回值:
{"returnData":{"@errore":"","elencoEventi":{"@nrEventi":"8","@urlPiattaforma":"https://uci.getyourevent.online","evento":[{"@idEventi":"1","@descrizione":"2019 UCI MTB World Championships Presented by Mercedes-Benz (Mont Sainte Anne-CAN)"},{"@idEventi":"3","@descrizione":"2019 UCI Road World Championships (Yorkshire-GBR)"},{"@idEventi":"4","@descrizione":"2019 UCI Urban World Championships (Chengdu-CHN)"},{"@idEventi":"5","@descrizione":"2020 UCI Cyclo Cross World Championships"},{"@idEventi":"6","@descrizione":"2020 Mercedes-Benz UCI Mountain Bike World Cup"},{"@idEventi":"7","@descrizione":"2020 UCI BMX Supercross World Cup"},{"@idEventi":"8","@descrizione":"2020 UCI Track World Championships Presented by Tissot (Berlin-GER)"},{"@idEventi":"9","@descrizione":"2020 UCI Road World Championships (Aigle-Martigny SUI)"}]}}}

{returnData: {@errore: , elencoEventi: {@nrEventi: 8, @urlPiattaforma: https://uci.getyourevent.online, evento: [{@idEventi: 1, @descrizione: 2019 UCI MTB World Championships Presented by Mercedes-Benz (Mont Sainte Anne-CAN)}, {@idEventi: 3, @descrizione: 2019 UCI Road World Championships (Yorkshire-GBR)}, {@idEventi: 4, @descrizione: 2019 UCI Urban World Championships (Chengdu-CHN)}, {@idEventi: 5, @descrizione: 2020 UCI Cyclo Cross World Championships}, {@idEventi: 6, @descrizione: 2020 Mercedes-Benz UCI Mountain Bike World Cup}, {@idEventi: 7, @descrizione: 2020 UCI BMX Supercross World Cup}, {@idEventi: 8, @descrizione: 2020 UCI Track World Championships Presented by Tissot (Berlin-GER)}, {@idEventi: 9, @descrizione: 2020 UCI Road World Championships (Aigle-Martigny SUI)}]}}}

关于dart - 解码base64 API响应将引发FormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63230798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com