我在处理R语言中的转义unicode字符时遇到了问题,具体来说是从MediaWiki API获取信息时遇到的问题。我会得到一个JSON字符串,例如:
{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}
这应该是完全有效的,但是通过fromJSON()
读取时,我得到:
snip...
[1] "Banach\023Tarski paradox"
起初,我认为这只是RJSONIO的问题,但我在使用scan()
和readLines()
时遇到了类似的问题。我猜想我可能缺少一些非常基础的东西。
实际上,我无法使用仅 R 来给出一个完全可重现的示例,因为如果我通过write()(或某个等效的函数)将“em–dash”发送到文件中, R 将自动转换 em dash。所以请看下面的步骤,创建一个名为test1的文本文件:
"em\u2013dash" "em–dash" " em \u2013 dash"
然后打开 R (根据文件路径):
> scan( file = "~/R/test1", what = "character", encoding = "UTF-8")
Read 3 items
[1] "em\\u2013dash" "em–dash" " em \\u2013 dash"
> readLines("~/R/test1", warn = FALSE, encoding = "UTF-8")
[1] "\"em\\u2013dash\" \"em–dash\" \" em \\u2013 dash\""
添加的转义字符是导致我在使用fromJSON()
时出现问题的原因。我可以将其剥离,但这可能会在过程中破坏其他内容,而且我想象中应该有更简单的解决方案。谢谢。
以下是会话信息:
R version 2.14.1 (2011-12-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] C/en_US.UTF-8/C/C/C/C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RJSONIO_0.98-0
loaded via a namespace (and not attached):
[1] tools_2.14.1
?scan
中关于allowEscapes
参数的注释,它似乎暗示解析器在scan
中不支持这个参数。但是这对我来说似乎很奇怪,所以我希望我是错的。 - joran?Quotes
的那一部分)。我通过连接或直接从RCurl中的getURL()
读取内容时也得到了相同的结果。 - Adam Hyland