RMarkdown:UTF-8使用Knit按钮但不适用于render()

时间:2017-11-20 23:17:31

标签: r encoding utf-8 r-markdown

我在RMarkdown工作,尝试渲染一个包含UTF-8字符的文档。当我按下RStudio中的“Knit”按钮时,一切都很棒。但是当我使用render()函数时,UTF-8会丢失。这是一段可重复代码的简短代码:

---
output: html_document
---

Total nitrogen (µg/L)

Water temperature (°C)

按下编织按钮可以为我提供正确的输出,无论是在RStudio还是在Chrome中查看。但是如果我用render()渲染文件,我得到:

  

总氮(μ/ L)

     

水温(°C)

我在Windows中工作,这可能是大部分问题的根源。这是我的语言环境信息。

Sys.getlocale("LC_ALL")
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

我尝试使用“options(encoding ='UTF-8')”添加代码块,但它没有帮助。我正在使用pwalk()使用不同的参数自动生成36个报告,因此我需要使用render()。

2 个答案:

答案 0 :(得分:5)

您可以强制进行编码:

render("test.html",encoding="UTF-8")

您也可以使用R终端设置编码:

options(encoding = 'UTF-8')
render("test.html")

答案 1 :(得分:0)

我认为这是一个评论,因为它不一定能回答你的问题,但是,在那里迷路太长了。

首先,使用 RStudio 中的 knit 按钮会调用render,所以一切都相同,无论是从控制台运行还是通过GUI运行都会产生相同的输出。

您的环境

来自 jjallaire 的重要说明,在Github上的一个旧的已关闭问题中:

  

当RStudio调用渲染时,它处于一个新的R进程中,而不是在当前会话的全局环境中(这是你在控制台调用render时要git)

提供上下文的一个好问题是here

初步结论

如果使用GUI按钮而不是从控制台正确呈现文档,则环境中会出现导致编码读取错误的内容。

尝试从干净的会话,如果它仍然产生相同的输出,那么这将表明启动时环境中的问题。检查编码......

getOption("encoding")
# [1] "native.enc"

不是将options(encoding = "UTF-8")放在代码块中,而是在render语句之前执行它。您可以通过再次运行上面的getOption来检查它是否已更改,并确认现在返回# [1] "UTF-8"