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 で開くと次のように文字化けすることなく日本語が認識されます。