2015-06-01 1 views
2

Я использую R RJSONIO для чтения json из файла. Json содержит символы Unicode, которые читаются некорректно.Как правильно иметь дело с экранированными символами Unicode в библиотеке R RJSONIO при чтении json из файла

Код работает, когда json передается как строка, как показано автором пакета R в вопросе о stackoverflow How to correctly deal with escaped Unicode Characters in R e.g. the em dash (—).

Однако, когда json считывается из файла, он не создает правильное представление в Юникоде. Как показано ниже:

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/температура содержит:

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

Какая версия ОС и R вы работаете? Я пробовал в Windows с R 3.1.1 с 'fromJSON (content = '{" query ": {" categorymembers ": [{" ns ": 0," title ":" Banach \ u2013Tarski paradox "}]}}') 'и он вернул« [1] «Парадокс Банаха-Тарского» «просто отлично. Вы говорите, что файл буквально имеет '\ u' в нем? Как вы создали такой JSON-файл? – MrFlick

+0

Когда вы копируете эту json ({"query": {"categorymembers": [{"ns": 0, "title": "Banach \ u2013Tarski paradox"}]}}) с \ u2013 в файл и прочитайте из файла, используя fromJSON (content = ), вы получаете \ 023 или получаете em-dash? Я использую Mac OSx 10.9 и R версии 3.2. –

+0

Ну, наличие '\ u' в файле JSON недопустимо (если вы хотите, чтобы последующий номер считался символом Юникода). Как вы создаете недопустимый JOSN-файл в первую очередь? – MrFlick

ответ

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), поэтому, когда я запускаю команду line utility 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 решена.

Смежные вопросы