当从文件中读取json时,如何正确处理R&#39库RJSONIO中的转义Unicode字符

时间:2015-06-01 18:27:07

标签: json r unicode rjsonio

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

当json作为字符串传递时,代码有效,如堆栈溢出How to correctly deal with escaped Unicode Characters in R e.g. the em dash (—)上的问题中R包的作者所示。

但是,当从文件中读取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"}]}}`

1 个答案:

答案 0 :(得分: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问题解决了。