【问题标题】:Unicode with knitr and Rmarkdown带有 knitr 和 Rmarkdown 的 Unicode
【发布时间】:2017-10-24 11:37:55
【问题描述】:
是否有一套在 knitr 和 Rmarkdown 中使用 Unicode 的最佳实践或文档?编织文档时,我似乎无法正确显示任何字形。
例如,这适用于控制台(在 Rstudio 中):
> cat("\U2660 \U2665 \U2666 \U2663")
♠ ♥ ♦ ♣
但是在编织时我得到了这个:
【问题讨论】:
标签:
r
unicode
knitr
r-markdown
【解决方案1】:
这看起来像是一个特定于 Windows 的编码问题,并且可能与此问题有关:https://github.com/hadley/evaluate/issues/59 不幸的是,我们必须等待基础 R 中的修复,但如果您不必使用 cat(),并且此表达式是代码块中的 顶级 表达式(例如,不在 for 循环或 if 语句内),我想这可能有效:
knitr::asis_output("\U2660 \U2665 \U2666 \U2663")
它将字符串直接传递给 knitr 并绕过 cat(),因为 knitr 在 Windows 上无法可靠地捕获 cat() 写出的多字节字符——这取决于关于字符是否可以用系统的本机编码表示。
【解决方案2】:
对于尝试在 Rstudio/Rmarkdown 文档中获得表情符号支持后遇到此问题的其他人,另一个可能的问题是,如果文件编码未设置为 UTF-8,则生成的编译文档也不支持表情符号.
为了让表情符号在 Rmarkdown 中工作,您必须 change the file encoding of the Rmd document。转到文件 -> 使用编码重新打开,然后选择 UTF-8。
确保文件以 UTF-8 编码打开后,您应该能够使用表情符号支持进行编译。
您甚至应该能够将浏览器中的表情符号直接粘贴到文档中。 ?
将所有文件的默认编码更改为 UTF-8 可能是个好主意,这样您就不必再处理这个问题了。
【解决方案3】:
Unicode:内联
Phew, that was close `r knitr::asis_output("\U1F605 \U2660 \U2665 \U2666 \U2663")`
Unicode:块
```{r, echo=FALSE}
knitr::asis_output("Phew, that was close \U1F605 \U2660 \U2665 \U2666 \U2663")
```
不幸的是,这个包还没有在 CRAN 上,但它可以用devtools::install_github("hadley/emo") 安装
emo::ji("face")
还有一些例子here