とりあえずMacでしか確認してません。
ExcelでUTF-8のCSVを開くと文字化けする
例えば次のようなデータフレームをCSV出力したいとする。
df <- data.frame(a = letters[1:3],
b = c("あ", "い", "う"))
これをそのままwrite.csv()
で出力するとUTF-8のCSVになるので、Excelで開くと文字化けする。
write.csv(df, "test.csv")
ExcelはUTF-8のCSVをそのままでは開けない。
対策
Shift-JISで出力する
書き込み
write.csv(df, "test.csv", fileEncoding = "CP932")
なんだか負けたような気がするがとりあえずExcelで開いても文字化けしない。
読み込み時の注意
ただし読み込むときに再びエンコーディングを指定する必要がある。
read.csv("test.csv", fileEncoding = "CP932")
readr::read_csv
でもエンコーディングの指定ができるけど少しやり方が異なるので注意。
readr::read_csv("test.csv", locale=readr::locale(encoding="CP932"))
BOM付きのCSVを出力する
書き込み
これもなんだか負けたような気がするけど扱いは多少楽になる。
readr::write_excel_csv()
で出力すれば自動的にBOM(Byte Order Mark)付きのUTF-8で出力される。
readr::write_excel_csv(df, "test.csv")
読み込み
R 3.0.0からはBOM付きUTF-8でも普通に読めるので、read.csv()
、read_csv()
ともにエンコーディング指定なしで特に問題は発生しない。確実にBOM殺したかったらUTF-8-BOM
を指定するという手段もある様子(cf. R 3.0.0の大事な変更点 - Qiita)。