2
2

More than 3 years have passed since last update.

【Dart/Flutter】Shift-JISでストレージにファイルを出力

Last updated at Posted at 2021-08-18

何を解決する記事か?

Dart/Flutter開発において、日本語文字列をShift-JISでエンコードしてテキストファイルを出力する方法を記載します。
(標準ではおそらく対処できず、一工夫します。)

結論

charset_converterライブラリ を使用して、下記のように処理します。

final encoded = await CharsetConverter.encode("Shift_JIS", contents); //encoding
await File(filePath).writeAsBytes(encoded); //save

contentsは書き込む本文、filePathは保存するパスです。いずれもString型です。

通常、テキストファイルの出力はFile.writeAsString関数を使用しますが、ここではライブラリを使用してバイト配列にエンコードした上でファイルに書き込みしているところがポイントです。

背景

Flutter開発において、テキストファイル(txt,csv等)をストレージに出力したいという場面はあるかと思います。
ところが、Dart SDKに含まれるdart:ioでは、日本語を表現できるフォントはutf8以外に現状選択肢がないようです。

内部処理に使うなら良いのですが、ファイルのメール送信やアップロード等するとなると、utf8では文字化けする場合が結構あります。
今回、何とかShift-JISで出力しようとして色々試した結果、うまくいった方法があったので共有しておきました。

参考

環境等。
- Dart SDK version: 2.13.3 (stable)
- Flutter 2.2.2
- charset_converter 2.0.0 https://pub.dev/packages/charset_converter

2
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
2
2