0
2

Flutter CSVデータを取得し文字コードを変換する

Posted at

【環境】

Flutter 3.7.7
Dart 2.19.4

【パッケージ】

http
charset_converter
csv

【サンプルコード】

Future<List<List<dynamic>>> getCsvDatas() async {
    
    List<List<dynamic>> csvDatas = [];
    final response = await http.get(Uri.parse('https://your.csv.url.csv'));

    if(response.statusCode == 200){
    final utf8Data = await CharsetConverter.decode('Shift_JIS', response.bodyBytes);
          csvDatas = CsvToListConverter(shouldParseNumbers: false).convert(utf8Data);
        } else {
      // エラーハンドリング追加する

      return csvDatas;
    }
    return csvDatas;
  }

今回取得したCSVは文字コードがShift_JISとします。
charset_converterパッケージを使用してCharsetConverter.decode('Shift_JIS',contents),でShift_JISからUTF-8へと変換しています。
その後行っているCsvToListConverter(shouldParseNumbers: false).convert(utf8Data)はcsvパッケージを使用してCSVデータをリストへ変換しています。

ここで注意したいのがshouldParseNumbers: falseです。
これはCSVデータ内の数字は数値として解析されず、文字列として扱われます。つまり、CSV内のすべてのデータは文字列として扱われ、数値に変換されることはありません。

【なぜshouldParseNumbers: falseを使用しているのか?】

今回取得したCSVデータの中に00000がありました。
このデータは00000として扱いたかった為、shouldParseNumbers: trueでは、整数として扱われるので0として解析されてしまいます。
この様な理由からshouldParseNumbers: falseにしています。

【最後に】

csvデータの文字コードを変換する方法の記載になりましたが、いろいろと応用はできると思いますので参考になれば幸いです。
また、charset_converterパッケージはShift_JISだけではなく他の文字コードにも対応していますので、とても便利なパッケージだと思います。
お時間あれば確認してみて下さい。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2