R Markdown 中 kableextra popovers/tooltips 中 umlauts/acute 重音的 UTF-8 编码

UTF-8 encoding of umlauts/acute accent in popovers/tooltips of kableextra in R Markdown

我想在 kableextra table 的工具提示中显示带有变音符号(即 äöü)和重音符号(例如 éè)的单词。但是,编码似乎出了问题。参见:

---
title: "R Markdown - Test umlaut"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(kableExtra)
library(dplyr)
```

如果我创建这个简单的 table,我会在工具提示中收到警告和中文 (?) 字母。如果我对 popover = "café" 执行相同的操作,我会收到相同的警告并且根本没有弹出窗口。

```{r kableextra}

x <- tibble(a = "Motörhead", b = "Motörfeet", c = "café", d = "olé") %>% 
  kbl() %>%
  kable_paper(full_width = F)

x %>% column_spec(3, tooltip = "café")

```

## Warning in `xml_attr<-.xml_node`(`*tmp*`, t, value = tooltip_list[t]): string is
## not in UTF-8 [1303]

令我困惑的是 umlauts/accents 在 table 的单元格中正确显示,但在 tooltip/popover.

中却没有

现在我发现问题可以用enc2utf8:

来解决
```{r kableextra2}

x %>% column_spec(3, tooltip = enc2utf8("café"))

```

我觉得奇怪的是,字符串是通过 RStudio 提供的,所以它不应该用 utf-8 编码吗?我还尝试了文件 -> 使用编码保存... -> utf-8。这没有帮助。

是kableextra的问题吗?有没有办法更优雅地解决它?我不太喜欢我的解决方案。

会话信息:

R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_1.0.2      kableExtra_1.3.1

loaded via a namespace (and not attached):
 [1] rstudioapi_0.13   knitr_1.30        xml2_1.3.2        magrittr_2.0.1    tidyselect_1.1.0 
 [6] rvest_0.3.6       munsell_0.5.0     colorspace_2.0-0  viridisLite_0.3.0 R6_2.5.0         
[11] rlang_0.4.9       highr_0.8         stringr_1.4.0     httr_1.4.2        tools_4.0.3      
[16] webshot_0.5.2     xfun_0.19         tinytex_0.28      ellipsis_0.3.1    htmltools_0.5.0  
[21] yaml_2.2.1        digest_0.6.27     tibble_3.0.4      lifecycle_0.2.0   crayon_1.3.4     
[26] purrr_0.3.4       vctrs_0.3.5       rsconnect_0.8.16  glue_1.4.2        evaluate_0.14    
[31] rmarkdown_2.5     stringi_1.5.3     pillar_1.4.7      compiler_4.0.3    generics_0.1.0   
[36] scales_1.1.1      pkgconfig_2.0.3 

RStudio Version 1.3.1093

似乎由于某种原因,您的文本未编码为 UTF-8,从而导致出现问题。这可以用 Encoding(x)validUTF8(x).

检查

您可以尝试使用 Encoding(x) = "UTF-8" 手动设置编码。

无论哪种方式,我都建议您从 sessionInfo() 和 RStudio 语言选项中检查您的语言环境。

这似乎是 kableExtra 中的错误,已在此处修复:https://github.com/haozhu233/kableExtra/pull/584。警告消息表明了该问题:kableExtra 使用您的输入设置了一些 XML 属性。 xml2 包希望这些字符串采用 UTF-8 编码,但默认情况下,大多数 Windows 系统使用其他编码。

也许这应该在 xml2 中得到解决,但至少有了那个补丁,您可以解决这个问题。