我试过写下可重复的例子。它是.Rmd和.r的混合体。希望你能明白为什么。
我遇到的问题是非英语字符的处理方式不同,具体取决于代码是直接在控制台中运行还是编织为HTML。
在下面的示例中,我创建了一个带有字符ü和ö的小型data.frame,将其写入csv,然后再次读回来。
如果写作和阅读都发生在一个块内部或外部,那么一切都很好。
但如果写作和阅读发生在不同的地方,那么就会使用不同的编码(我认为)。和人物混在一起。
这意味着在读取数据时,我需要在编译.Rmd文件时使用与直接在R中工作时不同的编码。
据我所知,语言环境总是一样的,所以我不明白发生了什么。
有什么想法吗?
df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a"))
write.csv(df2, file="df2.csv")
read.csv("df2.csv")
Sys.getlocale(category = "LC_ALL")
```{r read_inside}
read.csv("df2.csv")
Sys.getlocale(category = "LC_ALL")
```
```{r write_read_inside}
df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a"))
write.csv(df2, file="df2.csv")
read.csv("df2.csv")
Sys.getlocale(category = "LC_ALL")
```
会话信息:
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_2.15.0
答案 0 :(得分:2)
所以答案是保证UTF8编码,例如write.csv(..., fileEncoding = 'UTF-8')
。根本问题实际上是RStudio默认使用UTF8,但R默认使用操作系统的本机编码。我们可以要求R在write.csv
中使用UTF8,或者要求RStudio使用本机编码(options(encoding = 'native.enc')
)。