2

我正在努力将 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 字母,因为在我的数据框中有很多这些字符串序列?

我在 R 上运行 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 作为便携式应用程序运行。

先感谢您

亲切的问候

马库斯

4

1 回答 1

3

t2 <- str_replace_all(t2,"<U+","\u")不起作用的原因是因为\u开始一个 unicode 字符,而 R 期望 . 之后字符的十六进制代码\u。因此,您需要使用\\\\u插入字符串"\u"(您需要转义两次:一次用于 R,一次用于gsub)。但是,您最终得到的字符串 "\u03A0""\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")
于 2015-12-22T13:19:48.683 回答