[小ネタ] スロットを書き出したCSVファイルにBOMがつくことがあります

Alexa Developer Consoleでエクスポートしたスロット値のCSVファイルは、BOM付きUTF-8になるケースがあるようです。
2019.01.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

スロット値の書き出しCSV

Alexa Developer Consoleで、大量の値を持つカスタムスロットタイプがある場合、そのカスタムスロット値の編集が大変なので、以前からスロット値のエクスポート機能を利用していました。

カスタムスロットの編集画面で[書き出し]のリンクをクリックすると、<スロット名>-values.csvというファイル名でダウンロードされます。

CSVファイルの内容は:

値1,値1のID,値1の同義語1,値1の同義語2,値1の同義語3,…
値2,値2のID,値2の同義語1,値2の同義語2,値2の同義語3,…

以上のような形式になります。

このCSVファイルを編集し、同じくカスタムスロットの[一括編集]をクリックして表示されるダイアログからアップロードすることで、大量のスロット値の一括編集が可能です。

ハマったところ

以上のような手法でエクスポートしたCSVファイルを、マスターとなるファイルとプログラムで比較し、追加するカスタムスロット値を洗い出すプログラムを利用していましたが、意図通りの差分にならなくて調査していました。

デバッガーをかけたりと調査していたところ、CSVファイルで気づいた点があります。

エクスポートしたCSVをターミナルで確認すると、先頭に<U+FEFF>がついていました。
Visual Studio Codeで確認しても、文字コードがUTF-8 with BOMと判断されていました。

以上より、Alexa Developer Consoleでエクスポートしたスロット値のCSVファイルは、BOM付きUTF-8になるケースがあるようです。そのため、プログラムで扱う場合には、BOMを削除するなどの処理が必要な場合があると思われます。

本日手元で確認したところ、スロット値を書き出してBOMのつかないケースはありませんでした。以前からの仕様かは確認できていませんが、前記のとおり、エクスポートしたCSVはBOM付きになることがあると考えたほうがよさそうです。