R fromJSON错误地从文件中读取Unicode

时间:2015-10-09 05:48:22

标签: json r unicode character-encoding

我试图从文件中读取R中的json对象,其中包含unicode中的名称和姓氏。以下是文件" x1.json":

的内容
{"general": {"last_name":
"\u041f\u0430\u0449\u0435\u043d\u043a\u043e", "name":
"\u0412\u0456\u0442\u0430\u043b\u0456\u0439"}}

我使用RJSONIO包,当我直接声明JSON对象时,一切顺利:

x<-fromJSON('{"general": {"last_name": "\u041f\u0430\u0449\u0435\u043d\u043a\u043e", "name": "\u0412\u0456\u0442\u0430\u043b\u0456\u0439"}}')
x
# $general
# last_name      name 
# "Пащенко" "Віталій" 

但是当我从文件中读取相同文件时,字符串会转换为某些未知的编码:

x1<-fromJSON("x1.json")
x1
# $general
#    last_name         name 
# "\0370I5=:>" "\022VB0;V9" 

请注意,这些不会被转义&#34; \ u&#34; (was discussed here

我试图指定&#34;编码&#34;争论,但这没有帮助:

> x1<-fromJSON("x1.json", encoding = "UTF-8")
> x1
$general
   last_name         name 
"\0370I5=:>" "\022VB0;V9" 

系统信息:

> Sys.getlocale()
[1] "LC_COLLATE=Ukrainian_Ukraine.1251;LC_CTYPE=Ukrainian_Ukraine.1251;LC_MONETARY=Ukrainian_Ukraine.1251;LC_NUMERIC=C;LC_TIME=Ukrainian_Ukraine.1251"

切换到英语(Sys.setlocale(&#34; LC_ALL&#34;,&#34;英语&#34;))并没有改变这种情况。

2 个答案:

答案 0 :(得分:0)

使用库(“ jsonlite”)而不是rjson

library("jsonlite")
mydf <- toJSON( mydf, encoding = "UTF-8")

会没事的

答案 1 :(得分:-1)

如果你的文件有这样的unicode数据(而不是它的表示)

{"general": {"last_name":"Пащенко", "name":"Віталій"}}

然后,

> fromJSON("x1.json", encoding = "UTF-8")

将起作用

如果您真的希望您的代码能够使用当前文件,请尝试使用

JSONstring=""
con  <- file("x1.json",open = "r")
while (length(oneLine <- readLines(con, n = 1, warn = FALSE)) > 0) {
JSONstring <- paste(JSONstring,parse(text = paste0("'",oneLine, "'"))[[1]],sep='')
}
fromJSON(JSONstring)
相关问题