Как правильно работать с экранированными символами юникода в R, например, с тире (-)

У меня проблемы с обработкой экранированных символов юникода в R, особенно тех, которые встречаются при захвате информации из MediaWiki API. Я нахожу строку JSON вида

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

Что должно быть вполне корректно, но при чтении через fromJSON() я получаю:

snip...
[1] "Banach\023Tarski paradox"

Первоначально я думал, что это просто проблема с RJSONIO, но я столкнулся с аналогичными проблемами при использовании scan() и readLines(). Я предполагаю, что я упускаю что-то очень важное.

На самом деле я не могу привести полностью воспроизводимый пример, используя только R, потому что если я отправлю "em\u2013dash" в файл через write() (или какую-нибудь эквивалентную функцию), R автоматически преобразует тире. Итак, начнем. Создайте текстовый файл test1 со следующим именем:

"em\u2013dash" "em–dash" " em \u2013 dash"

Затем загрузите R (по любому пути к файлу):

> scan( file = "~/R/test1", what = "character", encoding = "UTF-8")
Read 3 items
[1] "em\\u2013dash"    "em–dash"          " em \\u2013 dash"
> readLines("~/R/test1", warn = FALSE, encoding = "UTF-8")
[1] "\"em\\u2013dash\" \"em–dash\" \" em \\u2013 dash\""

Добавленный символ экранирования - это то, что вызывает мои проблемы с fromJSON(). Я мог бы просто убрать их, но я, вероятно, сломал бы что-нибудь еще в процессе, и я представляю, что есть более простое решение. Спасибо.

Вот информация о сессии:

R version 2.14.1 (2011-12-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] C/en_US.UTF-8/C/C/C/C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RJSONIO_0.98-0

loaded via a namespace (and not attached):
[1] tools_2.14.1
10
задан Adam Hyland 10 February 2012 в 06:55
поделиться