gpt4 book ai didi

r - 如何正确处理 R 中的转义 Unicode 字符破折号 (—)

转载 作者:行者123 更新时间:2023-12-02 02:32:43 25 4
gpt4 key购买 nike

我在处理 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\u2013dash”发送到文件,R 将自动转换破折号。所以就这样吧。创建一个名为 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() 出现问题的原因。我可以把它们去掉,但我可能会在这个过程中破坏其他东西,我想有一个更简单的解决方案。谢谢。

这是 session 信息:

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

最佳答案

这实际上并不是 RJSONIO 中的错误。它被设计为期望一个已被 R 读取且已处理非 ASCII 字符的字符串。当一个人向它传递一个带有\u 的字符串时,该字符串尚未被处理而是转义了。在我的计算机上,区域设置设置为 en_US.UTF-8,命令

fromJSON('{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}')

产生

$query
$query$categorymembers
$query$categorymembers[[1]]
$query$categorymembers[[1]]$ns
[1] 0

$query$categorymembers[[1]]$title
[1] "Banach–Tarski paradox"

请注意,该字符的前缀是 \u,而不是 \\u。当您只需输入该字符串时,看看它在 R 中的显示方式。

所以问题出在 fromJSON() 的上游,为什么字符串包含\u。
我可能会在 RJSONIO 中添加支持来处理此类未处理的字符串。

关于r - 如何正确处理 R 中的转义 Unicode 字符破折号 (—),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com