什么?
一个.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
更新(2018 年 4 月):
\n在不同的设置和计算机下,问题仍然存在。\n我相信它与所有 UNICODE、UTF-8 字符有关。
问题:
\n\n我的 Rmd/R 文件以 UTF-8 编码保存。其他sessionInfo()详情:
Platform: x86_64-w64-mingw32/x64 (64-bit)\nLC_CTYPE=English_Canada.1252\n\nother attached packages:\n[1] knitr_1.17\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个简单的数据框,我需要将其打印为 html 文档中的表格,例如使用kable(dt)或任何其他方式。
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)\nRun Code Online (Sandbox Code Playgroud)\n\n以下任一方法都不起作用:
\n\n如果我保持 Sys.setlocale() 不变(即"English_Canada.1252"),那么我会得到:
> 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 |\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,<U+....>打印的是字符而不是字符。
\n使用dt$name <- enc2utf8(as.character(dt$name)) …