这是 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)
以上生成了您可以在此屏幕截图中看到的两个文件。第一个文件显示了 Unicode 代码点,这不是您想要的,而第二个文件显示了您通常期望的字形。
到目前为止,没有人能够向我解释为什么会在 R 中发生这种情况。这不是 Windows 的一个不可避免的特性,因为正如我在这篇文章中提到的,Perl 以某种方式解决了这个问题。