先日Rを触っていたら次のようなエラーが出た(という報告を受けた)。
Error in gsub("\"", qstring, col.names, fixed = TRUE) : input string 2 is invalid in this locale
状況としてはPostgreSQLのデータをdplyrでmutateしてwrite.csvに渡す際に発生していた。
発生したのはWindows環境で、macでは再現せず、Windowsでもなかなか再現しないので困っていたが、原因に見当がついたのでメモっておく。
結論としてはPostgreSQLのDBエンコーディングがUTF-8だったのが原因らしい(cf. dplyr、PostgreSQL、Windows の組み合わせで文字化けを防ぐ - Qiita)。
mutateの際に列名に日本語を設定していたものだから、列名が文字化けしてwrite.csvのエラーにつながったらしい。つまり、次のようなことをすると起こる。
tbl(con, "table_name") %>% mutate( あ = 1 ) %>% collect() %>% write.csv("file_name.csv")
mutateのところで日本語を渡してしまっているためか、client encodingをどうにかしても駄目だった。
先にcollectをするか、日本語のカラム名を使わないことで解決する。
tbl(con, "table_name") %>% collect() %>% mutate( あ = 1 ) %>% write.csv("file_name.csv")