これは、Windows の R の厄介な「機能」です。これまでに見つけた唯一の解決策は、問題のテキストのスクリプトをデコードするために必要な適切なロケールに一時的かつプログラム的に切り替えることです。したがって、上記の場合、日本語ロケールを使用します。
## This won't work on Windows
str <- "ていただけるなら"
Encoding(str) #returns "UTF-8"
write.table(str, file="c:/chartest.txt", quote=F, col.names=F, row.names=F)
## The following should work on Windows - first grab and save your existing locale
print(Sys.getlocale(category = "LC_CTYPE"))
original_ctype <- Sys.getlocale(category = "LC_CTYPE")
## Switch to the appropriate local for the script
Sys.setlocale("LC_CTYPE","japanese")
## Now you can write your text out and have it look as you would expect
write.table(str, "c:/chartest2.txt", quote = FALSE, col.names = FALSE,
row.names = FALSE, sep = "\t", fileEncoding = "UTF-8")
## ...and don't forget to switch back
Sys.setlocale("LC_CTYPE", original_ctype)
上記により、このスクリーンショットで確認できる 2 つのファイルが生成されます。最初のファイルは Unicode コード ポイントを示していますが、これは必要なものではありません。2 番目のファイルは、通常予想されるグリフを示しています。
なぜこれが R で起こるのか、これまでのところ誰も私に説明できませんでした。これは Windows の避けられない機能ではありません。なぜなら、この投稿で述べたように、Perl はこの問題を何とか回避しているからです。