使用 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
翻译
可能要问你的是如何通过 stringr 和 stringi 将原始的 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")
我正在努力将 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
翻译可能要问你的是如何通过 stringr 和 stringi 将原始的 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")