以下是我尝试编写的可重现示例,它是.Rmd和.r文件的混合体。希望你能明白其原因。
我的问题是,非英文字符在控制台直接运行代码或编织为HTML时会有不同的处理方式。
在下面的示例中,我创建了一个包含字符ü和ö的小数据框,将其写入csv文件,然后再次读取。
如果写入和读取都发生在代码块内部或外部,则一切正常。
但是,如果写入和读取发生在不同的地方,则使用不同的编码(我认为),字符就会混乱。
这意味着,在编译.Rmd文件时,读取数据时需要与在R中直接工作时使用不同的编码。
据我所见,区域设置始终相同,因此我不理解发生了什么。
有什么建议吗?
直接写入和读取csv以创建新的数据文件
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
write.csv(..., fileEncoding = 'UTF-8')
(未经测试)。 - Yihui Xieoptions(encoding = 'native.enc')
пјҢдҪҶжҲ‘д»Қ然е»әи®®е§Ӣз»ҲдҪҝз”ЁUTF-8гҖӮ - Yihui Xie