PowerAutomateでCSVが文字化けする場合の対策

「CSVテーブルの作成」アクションを使い、その出力をSharePointなどに書き出し、Excelで開いてみると文字化けしているということがよくあります。今回はその対策です。

適当なエクセルファイルを作成し、必要な個所だけを選択した結果を「CSVテーブルの作成」に渡し、さらにその出力をSharePointの「ファイルの作成」で.csvの拡張子をつけてドキュメントフォルダに書き出しています。

できたCSVファイルをWEB版のエクセルでそのまま開いてみると、しっかり文字化けしています。

BOMなしUTF-8が原因

ダウンロードしてテキストエディタで開いてみると文字化けしていません。UTF-8で保存されていることがわかります。テキストエディタは正しく文字コードを判定して表示してくれたようです。

ヒントはこちらのサイトにありました。 メモ帳で「UTF-8(BOM付き)」で保存すると解消すると。

そうか、BOMつければよいのですね。BOMってなに?

次の答えはこちらのサイトです。

プログラムがテキストデータを読み込む際に先頭の数バイトによりUnicodeのデータであることやどの種類の符号化形式を採用しているのかを判別しています。BOM付きのUTF-8であれば先頭の3バイトがBOMであり、<0xEF 0xBB 0xBF>というデータになります。

UX MILK https://uxmilk.jp/48923

BOMが無いなら、加えればいいじゃない?

ということは、出力するテキストファイルの先頭に<0xEF 0xBB 0xBF>を加えてやればよいようです。

PowerAutomateのフローで書き出す部分。

「ファイルの作成」の「ファイルコンテンツ」で、「CSVテーブルの作成」の出力を記載しているその手前に、式として以下を加えてやります。

decodeUriComponent('%EF%BB%BF')

これでちゃんとExcelで文字化けせずにCSVファイルを開くことができるようになりました。

concat関数でくっつけてもよい

今回はファイルコンテンツの部分で加えましたが、BOMと出力をconcat関数で式の中でくっつけてしまうこともできます。

concat(decodeUriComponent('%EF%BB%BF’),body('CSV_テーブルの作成’))

「CSV テーブルの作成」という元々のタイトルは半角スペースが入っています。式の中でスペースはアンダーバー「_」に書き換える必要があるので注意しましょう。

PowerAutomateの小技を集めています

このほかにもPowerAutomateで使える小技を集めていますので、逆引き辞典のように使っていただけると嬉しいです。https://mocabrown.com/blog/powerautomate