PostgreSQL の psql コマンドで出力したファイルが EXCEL で文字化けしないようにする方法

PostgreSQL の psql コマンドで出力したファイルが EXCEL で文字化けしないようにする方法

文字化けの原因は?

Linux の psql コマンドで出力したファイルを EXCEL で開くと下図のように日本語が文字化けしてしまいます。文字コードは UTF-8 で出力しているにも関わらず EXCEL は UTF-8 として読み込んでくれないようです。
その原因は UTF-8 ファイルの中に BOM が設定されていないからで、BOM を設定してあげることにより EXCEL が UTF-8 ファイルであると認識して正しく読み込んでくれます。


どのようにして BOM を設定するか?

通常 psql コマンドを実行する場合、次のようにして CSV ファイルを作成します。しかしこのままでは先に述べたように EXCEL で文字化けしてしまいます。
psql -U postgres -A -F',' --pset="footer=off" -c "SELECT * FROM information_schema.sql_languages UNION SELECT 'あ','い','う','え','お','か','き'" > data.csv

解決方法として、ファイルの先頭に BOM を設定するようにします。次のようにするとファイルの先頭に UTF-8 の BOM が設定されます。
psql -U postgres -A -F',' --pset="footer=off" -c "SELECT * FROM information_schema.sql_languages UNION SELECT 'あ','い','う','え','お','か','き'" | (echo -ne "\xEF\xBB\xBF"; cat) > data_bom.csv

このようにして BOM を設定したファイルを EXCEL で開くと次のように文字化けすることなく日本語が認識されます。