这是我的代码,我有一个在 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
我发现这是使代码崩溃的空格字符,但这就是我得到的
由于拼写错误,问题的代码将无法编译。即使修复了这些错误,代码也不会做任何有用的事情 -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字符串
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句