我喜欢编码UTF-8字符串。在我的数据中,R中函数=的字符用encoding分隔了,我需要用\x分隔它们

string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <-  gsub("=", "\x", string)
Encoding(x)
Encoding(x) <- "latin1"
x

我试图添加一,二,三个反斜杠来逃避。放在圆括号和方括号中。添加引号。输入参数fixed=F。阅读hereherehere仍然不知道如何做。

预期输出:
.01 Répondeur

当我像Wiktor所说的那样使用两个反斜杠并使用cat()进行检查时,输出中只有一个反斜杠,但是它对encoding()无效,仅当我手动更改它时。

编辑:

例如,当我这样做时,它会放两个反斜杠,而endcoding不起作用:
> gsub("=", "\\x", string, fixed=TRUE)
[1] "\\x2E\\x30\\x31\\x20\\x52\\xC3\\xA9\\x70\\x6F\\x6E\\x64\\x65\\x75\\x72"

与亚历山大·沃伊托夫(Aleksandr Voitov)的建议相同:
> gsub("=", "\\\\x", string)
[1] "\\x2E\\x30\\x31\\x20\\x52\\xC3\\xA9\\x70\\x6F\\x6E\\x64\\x65\\x75\\x72"

最佳答案

x <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"  # string data
x <- strsplit(x, "=", useBytes = FALSE )[[1]]       # split string
x <- x[nchar(x) > 0]                               # remove elements with 0 character length

使用strtoi
# convert string to integer and convert integer to raw and then to character
rawToChar( as.raw( strtoi(x, base = 16L) ) )
# [1] ".01 Répondeur"
?strtoi文档页面说

十六进制常量(前缀0x或0X)被解释为以8为底,
16

使用as.hexmode将字符转换为十六进制格式
rawToChar( as.raw( as.hexmode( x ) ) )
# [1] ".01 Répondeur"

关于r - 如何在R中使用gsub用单个反斜杠替换字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42994197/

10-10 03:07