相关疑难解决方法(0)

带有R Markdown,knitr和Windows的UTF-8

什么?

一个.Rmd文件是无差错的通过渲染knitr(或rmarkdown在Linux中).相关材料(即子R脚本和CSV输入数据)全部以UTF-8设置.

从Windows中执行相同的脚本(实际上脚本位于克隆的git存储库中)不会干净地呈现所有字符,因为它设置为Windows-1252.

例子

例如,将"sans réserves"来自CSV 的字符串输入到某些data.frame的列内容中,将其排版为"sans réserves".要正确阅读本文,只需在读入数据时添加encoding='UTF-8'即可read.csv.

另一个涉及其他R代码行之间的条目的示例是字符串"Trésorier Général".它被排版为"Trésorier Général".幸运的是,以下建议

read_chunk(lines = readLines("TestSpanishText.R", encoding = "UTF-8"))
Run Code Online (Sandbox Code Playgroud)

取自/sf/answers/1100023221/,工作,字符串按预期呈现.

有关

[ 更新 ]有一些相关的问答,但它们已超过2 - 3年.同样,这个页面https://support.rstudio.com/hc/en-us/articles/200532197-Character-Encoding,指出了这个问题.

问题

是否还有另一种更简单的方法来解决这个问题UTF-8和Windows内部问题R?关于如何解决这个问题的建议?我试图遵循所有原则的一个来源.

ps-一个有趣的阅读:https://superuser.com/a/221602/128768

windows r utf-8 knitr r-markdown

7
推荐指数
0
解决办法
2831
查看次数

在 R、Rmd、knitr、bookdown 中打印 UTF-8 字符

更新(2018 年 4 月):
\n在不同的设置和计算机下,问题仍然存在。\n我相信它与所有 UNICODE、UTF-8 字符有关。

\n\n

https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

\n\n

问题:

\n\n

我的 Rmd/R 文件以 UTF-8 编码保存。其他sessionInfo()详情:

\n\n
Platform: x86_64-w64-mingw32/x64 (64-bit)\nLC_CTYPE=English_Canada.1252\n\nother attached packages:\n[1] knitr_1.17\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个简单的数据框,我需要将其打印为 html 文档中的表格,例如使用kable(dt)或任何其他方式。

\n\n
dt <- data.frame(\nname=c("\xd0\x91\xd0\xbe\xd1\x80\xd0\xb8\xd1\x81 \xd0\x9d\xd0\xb5\xd0\xbc\xd1\x86\xd0\xbe\xd0\xb2","Martin Luter King"),\nyear=c("2015","1968") \n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下任一方法都不起作用:

\n\n

方式一

\n\n

如果我保持 Sys.setlocale() 不变(即"English_Canada.1252"),那么我会得到:

\n\n
> dt;                                                                                           \nname year\n1 <U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> 2015\n2 Martin Luter King 1968\n> kable(dt)\n|name                                                                                      |year |\n|:-----------------------------------------------------------------------------------------|:----|\n|<U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> |2015 |\n|Martin Luter King                                                                         |1968 |\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,<U+....>打印的是字符而不是字符。
\n使用dt$name <- enc2utf8(as.character(dt$name)) …

unicode r utf-8 knitr bookdown

5
推荐指数
1
解决办法
3104
查看次数

标签 统计

knitr ×2

r ×2

utf-8 ×2

bookdown ×1

r-markdown ×1

unicode ×1

windows ×1