这与之前的问题有关,此处:将\ u转义的Unicode字符串转换为ASCII
我提出了一个涉及的解决方案eval(parse(text=x)),对于非R用户来说,意味着它所说的:解析文本字符串,然后对其进行评估.目的不是允许执行任意代码,而只是为了解除转义的Unicode文本.因此解决方案:
eval(parse(text=paste0("'", x, "'")))
Run Code Online (Sandbox Code Playgroud)
虽然考虑到有限的目标,这应该是相当安全的,但我有兴趣知道:保持安全需要多少卫生处理?
至少,我想任何嵌入的单引号和双引号都必须被转义.例如,假设我们有
x <- "this is a '; print(dir()); 'string"
Run Code Online (Sandbox Code Playgroud)
然后eval根据上面的代码段执行此操作将执行中间的代码.所以我们必须逃避报价:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
Run Code Online (Sandbox Code Playgroud)
同样适用于双引号.我不认为未转义的 Unicode等价物\u0022并且\u0027是一个问题,因为对于解析器,它们将与plain "和'.
我错过了这种方法有什么漏洞吗?
在R中,可以先使用\u,然后再指定一个代码,以指定unicode字符。
"\u00c3"
[1] "Ã"
Run Code Online (Sandbox Code Playgroud)
如果我已经将“ 00c3”部分作为字符串怎么办,如何获得unicode?
"\u00c3"
[1] "Ã"
Run Code Online (Sandbox Code Playgroud)
我知道这个函数rawToChar(),但是这个字符的原始版本是c3 82。我怎样才能从00c3得到它?