Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用R中的gsub将字符串替换为单个反斜杠?_R_Regex_String - Fatal编程技术网

如何使用R中的gsub将字符串替换为单个反斜杠?

如何使用R中的gsub将字符串替换为单个反斜杠?,r,regex,string,R,Regex,String,我喜欢对UTF-8字符串进行编码。在我的数据中,字符用=分隔,对于R中的函数编码,我需要用\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 当我使用两个反斜杠,如Wiktor所说,并使用cat()进行检查时,输出中只有一个反斜杠,但它对encoding()没有影响,只有在我手动

我喜欢对UTF-8字符串进行编码。在我的数据中,字符用
=
分隔,对于R中的函数
编码
,我需要用
\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
当我使用两个反斜杠,如Wiktor所说,并使用
cat()
进行检查时,输出中只有一个反斜杠,但它对
encoding()
没有影响,只有在我手动更改它时才起作用

编辑:

.01 Répondeur
例如,当我这样做时,它会放置两个反斜杠,并且
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"
字符串
?strtoi
文档页面显示

十六进制常量(前缀0x或0x)解释为基数8和 十六,

使用
as.hexmode
将字符转换为十六进制格式

rawToChar( as.raw( as.hexmode( x ) ) )
# [1] ".01 Répondeur"
您可以使用
gsub(“=”,“\\x”,string,fixed=TRUE)
=
替换为
\x
,然后
解析生成的字符串:

string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <- parse(text = paste0("'", gsub("=", "\\x", string, fixed=TRUE), "'"))
x[[1]]
## => ".01 Répondeur"

在这里,我将所有
=
替换为空格+
U+
,然后在修剪输入后用1+空格符号拆分字符串
intToUtf8(as.u_char_seq(y))
从Unicode字符序列创建Unicode字符串。

尝试了
gsub(“=”,“\\x”,string,fixed=TRUE)
?看见你到底想得到
“.01 Répondeur”
吗?你必须使用
cat()
来查看字符串中的实际反斜杠。那么预期的输出是什么呢?@Wiktor Stribiżew确切地说是
”。01 Répondeur“
是我想要考虑的。@Cath,它只放了一个反斜杠,你只看到两个。看,没有测试,对不起
# convert string to integer and convert integer to raw and then to character
rawToChar( as.raw( strtoi(x, base = 16L) ) )                  
# [1] ".01 Répondeur"
rawToChar( as.raw( as.hexmode( x ) ) )
# [1] ".01 Répondeur"
string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <- parse(text = paste0("'", gsub("=", "\\x", string, fixed=TRUE), "'"))
x[[1]]
## => ".01 Répondeur"
> library(Unicode)
> string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
> x1 <- gsub("=", " U+", string, fixed=TRUE)
> y <- unlist(strsplit(trimws(x1), "\\s+"))
> intToUtf8(as.u_char_seq(y))
[1] ".01 Répondeur"