首页 文章

Knitting Rmd对待非英语字符的方式不同

提问于
浏览
3

我试着在下面写下可重复的例子 . 它是.Rmd和.r的混合体 . 希望你能明白为什么 .

我遇到的问题是,非英语字符的处理方式不同,具体取决于代码是直接在控制台中运行还是编织为HTML .

在下面的示例中,我创建了一个带有字符ü和ö的小型data.frame,将其写入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")



## 这第二个块将起作用,因为data.frame是在块内创建的

```java
```{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")


会话信息:

```java
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

1 回答

  • 2

    所以答案是保证UTF8编码,例如 write.csv(..., fileEncoding = 'UTF-8') . 根本问题实际上是RStudio默认使用UTF8,但R默认使用操作系统的本机编码 . 我们可以要求R在 write.csv 中使用UTF8,或者要求RStudio使用本机编码( options(encoding = 'native.enc') ) .

相关问题