【问题标题】:Normalize ASCII to UTF-8 in R在 R 中将 ASCII 规范化为 UTF-8
【发布时间】:2021-09-28 09:53:51
【问题描述】:

我有一个我正在尝试转换为 rdf 以进行编辑的数据框 门生。不幸的是,数据框的 ASCII 代码在打印字符串时不可见,最臭名昭著的是 \u0020,他将其编码为空格。

x <- "\u0020". 
x
> " "

grepl() 在搜索模式时工作正常, 但不返回原始字符串时 打印结果。

match <- 
grep(pattern = "\u0020", x = x, value = TRUE)
match
> " "

问题是这些代码正在抛弃 Protege,我正在尝试将它们规范化为基本字符,例如 \u0020" ",但我找不到任何可以捕获这些并用单个替换它们的正则表达式非代码字符。正则表达式模式[^ -~] 没有捕捉到这些值,否则我对这些字符串完全视而不见。如何在 R 中规范化这些代码?

【问题讨论】:

  • 字符串“\u0020”和字符串“”在R中相同。解析器将Unicode转义转换为空格。看你的变量x 是没有办法区分的。发现这些东西的唯一方法是查看源代码。
  • 或许值得一读utf8 vignette

标签: r regex ascii stringr stringi


【解决方案1】:

就我个人而言,我会使用 stringi 库替换文件中的所有 unicode。

给定一个 CSV 文件,test.csv 看起来像

col1,col2,col3
\u0020, moretext, evenmoretext

首先将其加载为data.frame

> frame <- read.csv("test.txt", encoding="UTF-8")
> frame
     col1      col2          col3
1 \\u0020  moretext  evenmoretext

接下来,找到您要替换的所有匹配项,并使用stri_unescape_unicode 将其变成 Protege 喜欢的内容。

> frame$col1
[1] "\\u0020"
frame$col1 <- stri_unescape_unicode(frame$col1)
> frame$col1
[1] " "

替换后,您应该能够将 csv 写回磁盘,而无需 unicode 条目。

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 2019-10-31
    • 2012-10-29
    • 1970-01-01
    • 2012-08-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多