IVI*_*VIM 5 unicode r utf-8 knitr bookdown
更新(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))没有帮助。
如果我改变Sys.setlocale("LC_CTYPE", "russian")#"Russian_Russia.1251"`,\n然后我得到:
> dt; \nname year\n1 \xc3\x81\xc3\xae\xc3\xb0\xc3\xa8\xc3\xb1 \xc3\x8d\xc3\xa5\xc3\xac\xc3\xb6\xc3\xae\xc3\xa2 2015\n2 Martin Luter King 1968\n\n> kable(dt)\n|name |year |\n|:-----------------|:----|\n|\xc3\x81\xc3\xae\xc3\xb0\xc3\xa8\xc3\xb1 \xc3\x8d\xc3\xa5\xc3\xac\xc3\xb6\xc3\xae\xc3\xa2 |2015 |\n|Martin Luter King |1968 |\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,字符已变成乱码。
\n使用print(dt,encoding="windows-1251"); print(dt,encoding="UTF-8")没有效果。
有什么建议吗?
\n\n我能找到的最接近解决此问题的方法是在以下链接中,但它们没有帮助: http: //blog.rolfredheim.com/2013/01/r-and-foreign-characters.html,https : //tomizonor .wordpress.com/2013/04/17/file-utf8-windows,https://www.smashingmagazine.com/2012/06/all-about-unicode-utf8-character-sets
\n\n我还尝试使用 1251 编码(而不是当前的 UTF-8 编码)和其他一些字符转换/处理包保存我的文件。还没有什么帮助。
\n\n更新:
\n\n打开相关问题:\n当出现错误“无法满足设置区域设置 \xe2\x80\xa6 的请求”时,如何更改 Sys.setlocale
\n唯一有效的解决方案是 Yihui Xie(knitr开发人员)建议的解决方案,即:
\n创建一个文件.Rprofile,其中包含一行Sys.setlocale("LC_CTYPE", "russian")并将其放在您的主目录或工作目录中。
但是,请注意,它仅适用于使用kable(),即在 package.json 的帮助下 knitr。
\n如果您尝试使用 进行打印print(dt$name[1]),您仍然会得到\xc3\x81\xc3\xae\xc3\xb0\xc3\xa8\xc3\xb1 \xc3\x8d\xc3\xa5\xc3\xac\xc3\xb6\xc3\xae\xc3\xa2。
\n但是,如果您使用kable(dt$name[1]),您将得到您所需要的 - \xd0\x91\xd0\xbe\xd1\x80\xd0\xb8\xd1\x81 \xd0\x9d\xd0\xb5\xd0\xbc\xd1\x86\xd0\xbe\xd0\xb2!
| 归档时间: |
|
| 查看次数: |
3104 次 |
| 最近记录: |