Mam problemy z obsługą unikalnych znaków Unicode w R, szczególnie tych napotkanych podczas pobierania informacji z MediaWiki API. Chciałbym znaleźć ciąg JSON jakJak poprawnie radzić sobie ze zmienionymi znakami Unicode w R, np. the em dash (-)
{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}
które powinny być całkowicie poprawny, ale gdy odczytywane przez fromJSON()
uzyskać:
snip...
[1] "Banach\023Tarski paradox"
Początkowo myślałem, że to był tylko problem z RJSONIO, ale spotkać podobny problemy z scan()
i readLines()
. Domyślam się, że brakuje mi czegoś bardzo prostego.
Nie mogę podać całkowicie odtwarzalnego przykładu używając tylko R, ponieważ jeśli wyślę "em \ u2013dash" do pliku poprzez write() (lub jakąś równoważną funkcję) R automatycznie konwertuje ekran em. Więc idzie. Utwórz plik tekstowy o nazwie test1 z następujących czynności:
"em\u2013dash" "em–dash" " em \u2013 dash"
Następnie załadować R (niezależnie ścieżka pliku jest):
> 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\""
Dodana postać ucieczka, co powoduje moje problemy z fromJSON()
. Mogłem po prostu je rozebrać, ale prawdopodobnie zepsułbym coś jeszcze w tym procesie i wyobrażam sobie, że jest łatwiejsze rozwiązanie. Dzięki.
Oto info sesja:
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
Jeśli zastosujemy się do wiadomości w '' scan' dotyczących allowEscapes? 'argument do'? Quotes', sugeruje, że parser po prostu nie obsługuje tego w 'scan'. Ale wydaje mi się to dziwne, więc mam nadzieję, że się mylę. – joran
Tak, też to widziałem (bit z "? Quotes"). Otrzymuję również ten sam wynik odczytu w treści od readLines przez połączenie lub od 'getURL()' w RCurl bezpośrednio. –