У меня возникли проблемы с обработкой экранированных символов Unicode в R, особенно тех, которые встречаются при захвате информации из API MediaWiki. Я хотел бы найти строку JSON, какКак правильно иметь дело с экранированными символами Unicode в R e.g. em emash (-)
{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}
Какой должна быть вполне допустимо, но при чтении через fromJSON()
я получаю:
snip...
[1] "Banach\023Tarski paradox"
Первоначально я думал, что это просто проблема с RJSONIO, но я сталкиваюсь похожи проблемы с scan()
и readLines()
. Я предполагаю, что мне не хватает чего-то очень элементарного.
Я не могу на самом деле дать полностью воспроизводимый пример использования только R, потому что если я посылаю «эм \ u2013dash» в файл с помощью записи() (или какой-либо эквивалентной функции) 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
Если следовать примечание в '' scan' относительно allowEscapes? 'argument to'? Quotes', то _seems_ предположить, что парсер просто не поддерживает это в 'scan'. Но мне это кажется странным, поэтому я надеюсь, что ошибаюсь. – joran
Да, я тоже это видел (бит из '? Quotes'). Я также получаю одинаковое чтение результата в контенте из readLines через соединение или из 'getURL()' в RCurl напрямую. –