2

我正在使用 R 的 RJSONIO 从文件中读取 json。json 包含 unicode 字符,这些字符会被错误地读取。

当 json 作为字符串传递时,代码工作,如 R 包的作者在 stackoverflow如何正确处理 R 中的转义 Unicode 字符的问题中所示,例如破折号 (-)

但是,当从文件中读取 json 时,它不会产生正确的 unicode 表示。如下图所示:

fromJSON(content="~/MTS/temp")
$query
$query$categorymembers
$query$categorymembers[[1]]
$query$categorymembers[[1]]$ns
[1] 0
$query$categorymembers[[1]]$title
[1] "Banach\023Tarski paradox"

其中 ~/MTS/temp 包含:

{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}`
4

1 回答 1

1

一个名为的替代包jsonlite按照您在我的系统 (OS X) 上所期望的方式工作——但我确实验证了 RJSONIO 没有。这是在我将您的 JSON 片段保存到一个名为的文件之后utext.txt

file.show("utext.txt")
## {"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}
jsonlite::fromJSON("~/temp/utext.txt")
## $query
## $query$categorymembers
##   ns                 title
## 1  0 Banach–Tarski paradox

这是另一个更依赖于平台的解决方案:在读取 Unicode 转义文件之前对其进行编码。(我不知道您的平台是否有此实用程序,但即使对于 Windows,您也可能找到它。)

我的系统语言环境编码是 UTF-8(OS X 标准),所以当我运行命令行实用程序时,native2ascii我可以将其编码为 UTF-8,然后将其读入 R,我的语言环境设置为 en_GB.UTF-8。

从终端/外壳:

native2ascii -reverse ~/temp/utext.txt ~/temp/utextUTF8.txt

然后在R中:

RJSONIO::fromJSON("~/temp/utextUTF8.txt")
## $query
## $query$categorymembers
## $query$categorymembers[[1]]
## $query$categorymembers[[1]]$ns
## [1] 0
## 
## $query$categorymembers[[1]]$title
## [1] "Banach–Tarski paradox"

Voil\u00e0 问题解决了。

于 2015-06-01T21:00:31.743 回答