首页 > 解决方案 > 瑞典语字符的文本编码在 YAML 中出错

问题描述

我想在 RStudio 中使用参数化报告。但是,当我将参数与带有变音符号的瑞典字符(如 å、ä ö)一起使用时,编码会出现问题。我在我的电脑上运行 Windows 10。

例子:

title: "test_yaml_encoding"
output: html_document
params:
  swe_chars_param: "åäöÅÄÖ"


```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
print(params$swe_chars_param)
```

[1] "åäöÅÄÖ"

这似乎是一个已知问题: https ://github.com/rstudio/rmarkdown/issues/420 但我还没有设法找到解决方案。

一种解决方案是使用函数修复编码。我尝试了两种不同的解决方案。

第一次尝试:

ffix_swedish_chars <- function(txt) {
  txt <- gsub("Ã¥", "å", txt)
  txt <- gsub("ä", "ä", txt)
  txt <- gsub("ö", "ö", txt)
  txt <- gsub("Ã…", "Å", txt)
  txt <- gsub("Ä", "Ä", txt)
  txt <- gsub("Ö", "Ö", txt)
}

print(ffix_swedish_chars(params$swe_chars_param))

结果:

[1] "åäöÅÄÖ"

它有效,但仅适用于小写字母。

然后我尝试使用蛮力并尝试将所有可能的编码循环到 UTF-8

library(utf8)
library(purrr)
library(readr)


koder <- iconvlist()


ftest_kodning <- function(str, kod) {
  iconv(str, from = kod, to = "UTF-8")
}

ftest_kodning_safe <- possibly(ftest_kodning, NA)

for (i in 1:length(koder)) {
  print(paste(koder[i], ftest_kodning_safe(params$swe_chars_param, koder[i])))
}

我找不到任何有效的编码组合。

现在我被困住了。有没有人有办法解决吗?

编辑:

我不知道这是否有任何帮助,但这是字符的原始代码:

print(charToRaw(params$swe_chars_param)) [1] c3 83 c2 a5 c3 83 c2 a4 c3 83 c2 b6 c3 83 e2 80 a6 c3 83 e2 80 9e c3 83 e2 80 93

标签: rr-markdown

解决方案


推荐阅读