【问题标题】:UTF-8 encoding of umlauts/acute accent in popovers/tooltips of kableextra in R MarkdownR Markdown 中 kableextra 弹出框/工具提示中变音符号/重音符号的 UTF-8 编码
【发布时间】:2021-04-27 15:20:11
【问题描述】:

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

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

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

如果我创建这个简单的表格,我会在工具提示中收到警告和中文 (?) 字母。如果我对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]

让我感到困惑的是,元音变音/重音正确显示在表格的单元格中,但没有显示在工具提示/弹出窗口中。

现在发现使用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

【问题讨论】:

  • 您能否添加来自sessionInfo() 的输出,尤其是locale 部分?

标签: r utf-8 r-markdown kableextra


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    似乎由于某种原因您的文本未编码为 UTF-8,从而导致问题。这可以通过Encoding(x)validUTF8(x) 进行检查。

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

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

    【讨论】:

    • 不幸的是,同样的问题。
    • 你可以试试kbl(format = "latex")吗?
    • 我认为工具提示在乳胶中不起作用。
    • 我的错,你是对的。我运行了你的代码,它对我来说似乎工作正常,所以你能检查你的文件的编码吗?也可以试试validUTF8(x),它应该返回TRUE
    • 小心:Encoding(x) = "UTF-8" 只是改变了声明的编码,它实际上并没有改变字符串的编码方式。为此使用enc2utf8()iconv(s, to = "UTF-8")。根本问题是 Windows 最近才开始正确支持 UTF-8,并且发布的 R 版本无法利用它,因此它们充满了小技巧来解决自动转换为 Latin1 的问题。不知道这是如何导致汉字的。
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    相关资源
    最近更新 更多