我可以将 Unicode 转换为 R 中的纯文本吗?

Can I convert Unicode into plain text in R?

我使用的数据有很多像"<U+XXXX>"这样的字符。本来,它看起来像这样作为一个数据点,"<U+043E><U+043A><U+0430><U+0437><U+044B>: 673"

我很好奇我应该使用什么来轻松有效地将它们转换成普通的纯文本。我的 table 中有几行这个 Unicode,现在我很困惑。

我一直在寻找在线转换的方法,但大多数都不起作用。例如,我已经在我的数据上尝试过这段代码,将它从 UTF-8 转换为拉丁语;失败了。

www <- c("<U+043C>")
www %>% iconv(from = "UTF-8", to = "latin1")
[1] <U+043C>

另外,我试过没有箭头。仍然,它没有转换。

www <- c("U+043C")
www %>% iconv(from = "UTF-8", to = "latin1")
[1] U+043C

或者,我试过这个功能。

example <- c("<U+041F><U+043E><U+043A><U+0430><U+0437><U+044B>: 58025")
iconv(example, "UTF-8", "latin1")
[1] "<U+041F><U+043E><U+043A><U+0430><U+0437><U+044B>: 58025"

伙计们,有什么想法吗?

当您键入 "<U+043C>" 时,它被解释为 8 个字符的文字字符串。无论此字符串被解释为 latin-1 还是 UTF 都无关紧要,因为它们都以相同的方式对这 8 个文字字符进行编码。

您需要做的是unescape unicode 字符串。 stringi 包可以为你做这件事,但你需要先做一些转换才能得到正确的格式。以下函数应该处理它:


f <- function(x) {
  
   x <- gsub(">", "", gsub("<U\+", "\\u", x))
   stringi::stri_unescape_unicode(x)
}

所以你可以这样做:

example <- c("<U+041F><U+043E><U+043A><U+0430><U+0437><U+044B>: 58025")
www <- c("<U+043C>")

f(example)
#> [1] "Показы: 58025"

f(www)
#> [1] "м"