2015-10-09 140 views
0

我想從文件讀取j中的json對象,其中包含unicode中的名稱和姓氏。這裏的文件「x1.json」的內容:來自JSON的R不正確地從文件中讀取Unicode

{"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" 

注意,這些都沒有逃過「\ U」(這was discussed here

我試圖指定 「編碼」 的說法,但這並沒有幫助:

> 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( 「LC_ALL」,「英語「))並沒有改變這種情況。

+1

是否有任何理由不使用'rjson'軟件包?它的功能來自'fromJSON'。 –

+0

@帕斯卡爾說什麼,見http://stackoverflow.com/questions/30580601/how-to-correctly-deal-with-escaped-unicode-characters-in-rs-library-rjsonio-whe –

+0

它適用於我。 –

回答

0

如果你的文件有這樣的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) 
+0

正如我3小時前所說的那樣,它可以從'rjson'包中的'fromJSON'工作,無需操縱。 –

+0

@MikA,爲我工作,謝謝! –