からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

Power Automate で CSV を保存したときにコンテンツが文字化けする

Power Automate で CSV を作成して OneDrive for Business などに保存するフローを作ったときに、CSV のコンテンツに日本語が含まれると Excel で開いたときに文字化けしてしまいます。

たとえば、以下のような JSON を CSV に変換して OneDrive for Business に保存するフローを作成してみます。

[
  { "Id": 1, "Title": "日本書紀" },
  { "Id": 2, "Title": "万葉集" },
  { "Id": 3, "Title": "古事記" }
]

フローは以下のような感じになります。

f:id:karamem0:20200930163824p:plain

これを実行して Excel で開くと文字化けしているのがわかります。

f:id:karamem0:20200930163839p:plain

原因

Power Automate では文字列はすべて UTF-8 で処理されます。よって OneDrive for Business に保存したときも文字コードは UTF-8 になります。しかし Excel は UTF-8 であることを認識できずに Shift-JIS でファイルを開いてしまいます。UTF-8 であることを認識させるには BOM 付きの UTF-8 として保存してあげる必要があります。

対応方法

ファイルを保存するときに BOM を追加してあげます。BOM は 0xEF 0xBB 0xBF の 3 バイト データなので、これを追加するようフローを修正します。バイト データの書き出しに decodeUriComponent('%EF%BB%BF') を使うのがポイントです。

f:id:karamem0:20200930163856p:plain

これでちゃんと文字化けしないで出力されるようになりました!

f:id:karamem0:20200930163908p:plain