What is it, naokirin?

Flutterでhttpパッケージでデータを取得すると文字化けするのを修正する

Flutter(Dart)でHTTPリクエストする場合には、httpパッケージを利用するのが便利です。

pub.dev

こちらを利用して、以下のようなJSONファイルをHTTPサーバーから取得するコードを書きました。

import "package:http/http.dart" as http;

Future<String> fetch(String url) async {
  final response = await http.get(Uri.parse(url)));
  return response.body;
}

しかし、ローカルで立てたHTTPサーバーからの取得では大丈夫でしたが、S3からの取得では文字化けしてしまいました。
どうやら、Content-Typecharset=utf8 が含まれていないと、 LATIN-1 と解釈されてしまうようです。

そのため、bodyBytes を取得した上で、明示的にUTF-8に変換を行うことで対応できます。

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

Future<String> fetch(String url) async {
  final response = await http.get(Uri.parse(url)));
  return utf8.decode(response.bodyBytes);
}