首页 > 解决方案 > 在 R 中将 ASCII 规范化为 UTF-8

问题描述

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

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

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

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

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

标签: rregexasciistringrstringi

解决方案


就个人而言,我只会使用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] " "

替换后,您应该能够在没有 unicode 条目的情况下将 csv 写回磁盘。


推荐阅读