我在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()。
答案 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"