首页 > 解决方案 > R错误:1:输入不正确的UTF-8,表示编码!XMLtoList

问题描述

这是我的代码,我有一个以 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

我发现这是导致代码崩溃的空格字符,但这就是我得到的全部

标签: rxmldatabaseencodingutf-8

解决方案


由于拼写错误,问题的代码无法编译。即使修复了这些错误,代码也没有做任何有用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字符串了


推荐阅读