如何在R中的字符串中存储特殊字符
How to store a special character in a string in R
我正在尝试将特殊转义字符 \
作为字符串的一部分存储在 R 中。
x = "abcd\efg"
# Error: '\e' is an unrecognized escape in character string starting ""abcd\e"
x = "abcd\efg"
# Works
问题是 x
实际上是我作为 API 网络调用的一部分传递的密码,因此我需要找到一种方法让字符串在其中存储文字单斜线为了这个工作。
使用忽略文字命令的示例:
> x = r"(abcd\efg)"
> y = "https://url?password="
> paste(x, y, sep = "")
[1] "abcd\efg123"
> # What I need is for it to return
[1] "abcd\efg123"
> z = paste(y, x, sep = "")
> z
[1] "https://url?password=abcd\efg"
> cat(z)
https://url?password=abcd\efg
当我将 z
作为 API 命令的一部分传递时,我收到“错误凭据”消息,因为它发送 \
作为字符串的一部分。 cat
returns 它正确地发送到控制台,但发送它的方式似乎与它打印回来的方式不同。
就像评论中的其他人所说的那样,R 似乎正确处理了该字符串。我认为它会在其他地方成为问题。 API 或 pass-matching 软件本身可能正在用它做一些事情。
举个例子,反斜杠如果一字不差地写在大多数浏览器中将不起作用,您需要改用 %5C
。 Here 是一个关于它的讨论。
所以在你的情况下 - 尝试用其他东西替换反斜杠,或者 %5C
或者,正如评论中提到的@Roland,一些额外的 back-slash 符号,比如 \\
或\\
或 \
。然后看看它们是否有效。
答案和评论包含解决方案,但为了完整起见,我post一个符合我具体情况的答案。
我的包裹需要用户提供密码。如果密码中有 \
,命令将失败,如上所述。解决方案似乎是在输入时处理它,而不是在用户提交密码后尝试更改值。
library(RobinHood)
# If the true password is: abc\def
# The following inputs will all work
rh <- RobinHood("username", pwd = r"(abc\def)")
rh <- RobinHood("username", pwd = "abc\def")
rh <- RobinHood("username", pwd = "abc%5Cdef")
我正在尝试将特殊转义字符 \
作为字符串的一部分存储在 R 中。
x = "abcd\efg"
# Error: '\e' is an unrecognized escape in character string starting ""abcd\e"
x = "abcd\efg"
# Works
问题是 x
实际上是我作为 API 网络调用的一部分传递的密码,因此我需要找到一种方法让字符串在其中存储文字单斜线为了这个工作。
使用忽略文字命令的示例:
> x = r"(abcd\efg)"
> y = "https://url?password="
> paste(x, y, sep = "")
[1] "abcd\efg123"
> # What I need is for it to return
[1] "abcd\efg123"
> z = paste(y, x, sep = "")
> z
[1] "https://url?password=abcd\efg"
> cat(z)
https://url?password=abcd\efg
当我将 z
作为 API 命令的一部分传递时,我收到“错误凭据”消息,因为它发送 \
作为字符串的一部分。 cat
returns 它正确地发送到控制台,但发送它的方式似乎与它打印回来的方式不同。
就像评论中的其他人所说的那样,R 似乎正确处理了该字符串。我认为它会在其他地方成为问题。 API 或 pass-matching 软件本身可能正在用它做一些事情。
举个例子,反斜杠如果一字不差地写在大多数浏览器中将不起作用,您需要改用 %5C
。 Here 是一个关于它的讨论。
所以在你的情况下 - 尝试用其他东西替换反斜杠,或者 %5C
或者,正如评论中提到的@Roland,一些额外的 back-slash 符号,比如 \\
或\\
或 \
。然后看看它们是否有效。
答案和评论包含解决方案,但为了完整起见,我post一个符合我具体情况的答案。
我的包裹需要用户提供密码。如果密码中有 \
,命令将失败,如上所述。解决方案似乎是在输入时处理它,而不是在用户提交密码后尝试更改值。
library(RobinHood)
# If the true password is: abc\def
# The following inputs will all work
rh <- RobinHood("username", pwd = r"(abc\def)")
rh <- RobinHood("username", pwd = "abc\def")
rh <- RobinHood("username", pwd = "abc%5Cdef")