Ошибка R: 1: неверный ввод UTF-8, укажите кодировку! XMLtoList - PullRequest
0 голосов
/ 30 сентября 2019

Вот мой код, у меня есть запрос, который я преобразую в UTF8, но, наконец, я получаю сообщение об ошибке, что запрос не в UTF8, я не могу это исправить:

library("XML")
library("methods")
library("httr")

query = http://export.arxiv.org/api/query?search_query=(au:( \"Benoit Bertrand\"))&start=0&max_results=2000
xml_data = xmlToList(iconv(URLencode(query),to="UTF-8"))

Ошибка: 1: ввод неправильный UTF-8, укажите кодировку!
Байты: 0xC9 0x70 0x69 0x6A

Я обнаружил, что пробел в коде привел к сбою кода, но это все, что я получил

1 Ответ

2 голосов
/ 30 сентября 2019

Код вопроса не будет компилироваться из-за ошибок. Даже если эти ошибки были исправлены, код не делает ничего полезного - xmlToList применяется к URL , а не к результатам запроса GET. Этого достаточно, чтобы сгенерировать ошибку:

query<-"http://export.arxiv.org/api/query?search_query=(au:( \"Benoit Bertrand\"))&start=0&max_results=2000"
xmlToList(query)

Никакое количество кодировки URL и конверсий не исправит это. Преобразование также не требуется, поскольку URL-адрес попадает в диапазон US-ASCII. В этом диапазоне строка UTF8 неотличима от строки ASCII.

Правильный код для получения и анализа этой страницы Arxiv:

//Just a URL
query<-"http://export.arxiv.org/api/query?search_query=(au:( \"Benoit Bertrand\"))&start=0&max_results=2000"
//Get the contents
r <- GET(query)
//Extract the text from the response
xml<-content(r, "text")
//Read as lists
l<-xmlToList(xml)

Ответ r это не просто строка, это объект, который содержит заголовки (включая кодировку), статус ответа и содержание ответа. Одним из заголовков является Content-Type:

> r
Response [http://export.arxiv.org/api/query?search_query=(au:( "Benoit Bertrand"))&start=0&max_results=2000]
  Date: 2019-09-30 12:54
  Status: 200
  Content-Type: application/atom+xml; charset=UTF-8
  Size: 786 B

content(r, "text") преобразует содержимое в текст с использованием кодировки, хранящейся в этом заголовке.

После этого xmlToList может анализироватьXML строка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...