尽管使用 UTF-8,但在块内编码会导致字符丢失

Encoding within chunks results in missing characters despite UTF-8

我有一个用 UTF-8 编码的 Rmd 文件,但是当我编织文件时,R 评估内联和块内容缺少一些捷克字符。当我在块外键入文本时,一切都很好。从文件中读取相同的文本,我可以正确地生成内联输出,但在块内使用打印(printcat)时却不行。我对这种情况完全感到困惑,尤其是 cat 行为。

我在 Windows。在控制台中检查编码 returns UTF-8。语言环境设置为 English_United Kingdom.1252.

---
title: "test"
output: html_document
---
```{r}
txt <- "Čeština funguje"
print(Encoding(txt))
print(txt)      # prints incorrectly
```

Čeština funguje # prints correctly
`r txt`         # prints incorrectly

```{r}
cat(txt)        # prints incorrectly
```

```{r, results='asis'}
line <- readLines("line", encoding = "UTF-8")
print(Encoding(line))
print(line) # prints incorrectly
cat(line)   # prints incorrectly
```

`r line`    # prints correctly!

P.S。我知道 Windows 上有很多关于 R 和编码的说法,但尽管我进行了广泛的搜索,但我找不到解决方案,也不完全理解这种行为。我猜我需要设置一些语言环境,但到目前为止我的努力是徒劳的。

R supports UTF-8 natively on Windows 之前,如果您想使用该语言的多字节字符,通常您必须将区域设置设置为特定语言,例如,如果您需要使用捷克语区域设置而不是英语想要正确 print()/cat() 捷克语字符。需要在编织发生之前设置语言环境,例如,您可以在 ~/.Rprofile:

中设置它
Sys.setlocale(, 'Czech')

我以前从未使用过捷克语,我不确定 'Czech' 是否是一个合适的值,但这就是我的想法(我以前在其他语言上取得过成功)。