使用 R 中的 stringi 和 stringr 将 utf-8 自动转换为 ascii - 转义字符 \u 出错

Automatic translation of utf-8 into ascii using stringi and stringr in R - Error with escape character \u

我正在努力将 utf-8 自动翻译成 ascii 字母。

在数据框中,我有以下源自希腊字母的序列:

<U+03A0><U+0391><U+039D><U+0391>G

通过手动将序列转换为

\u03A0\u0391\u039D\u0391G

我使用 stringi 使用此命令获得了正确的转录:

t <- "\u03A0\u0391\u039D\u0391G" # original "ΠΑΝΑΓ"
t <- stri_trans_general(t,"any-latin")
t <- stri_trans_general(t,"latin-ascii")
print(t)
[1] "PANAG"

现在,我想通过 stringr 使用以下命令自动进行翻译:

t2 <- "<U+03A0><U+0391><U+039D><U+0391>G"
t2 <- str_replace_all(t2,">","")
t2 <- str_replace_all(t2,"<U+","\u") # double \ for the escape character

结果是:

[1] "+03A0+0391+039D+0391G"

无法通过stringi

翻译

可能要问你的是如何通过 stringrstringi 将原始的 utf-8 字符串翻译成 ascii 字母,就像我的dataframe 有很多这样的字符串序列吗?

我是 运行 RStudio 版本 0.99.825

R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale: [1] LC_COLLATE=German_Austria.1252

RStudio 和 R 运行 作为便携式应用程序。

提前致谢

亲切的问候

马库斯

t2 <- str_replace_all(t2,"<U+","\u") 不起作用的原因是因为 \u 开始一个 unicode 字符并且 R 需要 \u 之后字符的十六进制代码。因此,您需要使用 \\u,它会插入字符串 "\u"(您需要转义两次:一次用于 R,一次用于 gsub)。但是,您最终得到的 string "\u03A0" 与文件中 console/sourced 中键入的 "\u03A0" 不同。我在下面使用的技巧是解析字符串。

在那里,可能应该有一个更简单的方法来做到这一点,但以下工作:

 library(stringi)

str <- "<U+03A0><U+0391><U+039D><U+0391>G"

t <- gsub("<U\+", "\\u", str)
t <- gsub(">", "", t)
t <- eval(parse(text=paste0('"', t, '"')))

t <- stri_trans_general(t,"any-latin")
stri_trans_general(t,"latin-ascii")