【问题标题】:RMarkdown: UTF-8 works with Knit button but not with render()RMarkdown:UTF-8 适用于 Knit 按钮,但不适用于 render()
【发布时间】:2017-11-20 23:17:30
【问题描述】:

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

---
output: html_document
---

Total nitrogen (µg/L)

Water temperature (°C)

无论我是在 RStudio 中还是在 Chrome 中查看,按下 Knit 按钮都会给我正确的输出。但是如果我用 render() 渲染文件,我会得到:

总氮 (µg/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() 来实现它。

【问题讨论】:

    标签: r encoding utf-8 r-markdown


    【解决方案1】:

    您可以强制编码:

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

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

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

    【讨论】:

    • 在 render() 中强制编码效果很好——谢谢!但是,在 R 终端中设置编码,然后调用 render() 是行不通的。
    【解决方案2】:

    我将其视为评论,因为它不一定回答您的问题,但是,它太长以至于迷路了。

    首先,使用 RStudio 中的 knit 按钮确实调用了render,所以所有事情都是平等的,无论是从控制台运行还是通过 GUI 运行都会产生相同的结果输出。

    你的环境

    jjallaireGithub 的一个旧的已关闭问题中的重要说明:

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

    提供上下文的好问题是here

    初步结论

    如果文档使用 GUI 按钮而不是从控制台正确呈现,则说明您的环境中存在导致编码读取不正确的问题。

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

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

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

    【讨论】:

    • 从一个新的 RStudio 会话中,我仍然得到相同的行为——文件将使用 Knit GUI 按钮正确呈现,但不是通过调用 render()。在渲染语句之前设置编码也不起作用,即使编码确实成功更改。来自 agstudy 的建议确实可以在 render() 调用中指定编码:render("test.Rmd",encoding="UTF-8")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2015-07-19
    相关资源
    最近更新 更多