注册商标打印额外字符

时间:2017-08-21 18:54:59

标签: r unicode gsub

我从SAS导入了一些奇怪的变量,其中包含上标注册商标的unicode值,并使用gsub尝试使变量在R中成为注册商标。我在下面做了一些虚拟数据,只是为了表明我做了什么。由于某种原因,它正在打印一个额外的符号。有谁知道为什么会发生这种情况?

var1<-factor(c("prod1^{unicode 00AE}","prod2^{unicode 00AE}"))
var2<-as.factor(sapply(var1,gsub,pattern="\\{unicode 00AE\\}",replacement="\u00AE"))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®

2 个答案:

答案 0 :(得分:1)

不确定gsub发生了什么事;但str_replace_all提供的stringr能够提供所需的输出:

> var1<-factor(c("prod1^{unicode 00AE}","prod2^{unicode 00AE}"))
> var2<-as.factor(sapply(var1,str_replace_all,pattern="\\{unicode 00AE\\}",replacement="\U00AE"))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®

答案 1 :(得分:1)

错误来自于gsub在替换中未正确处理\uXXXX符号的事实,即使使用fixed=TRUE也是如此。您实际上需要“手动”将结果设置为UTF8。看,这样可行:

> res <- gsub("{unicode 00AE}", "\u00AE", x, fixed=TRUE)
> res
[1] "prod1^®"
> Encoding(res) <- "UTF-8"
> res
[1] "prod1^®"

在您的情况下,您可以使用replacement="®",它会正确显示结果:

> var2<-as.factor(sapply(var1,gsub,pattern="{unicode 00AE}",replacement="®", fixed=TRUE))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®