何を解決する記事か?
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