r - 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
我发现这是导致代码崩溃的空格字符,但这就是我得到的全部
解决方案
由于拼写错误,问题的代码无法编译。即使修复了这些错误,代码也没有做任何有用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字符串了
推荐阅读
- sql - Oracle SQL - 使用 select 为某些行生成聚合行
- sql-server-2008 - 如何在一长串文本字段中搜索特定单词并计算它们 - sqlserver
- java - 重写 clone() 方法时,为什么需要将其声明为 public?
- vue.js - 为什么 html 显示计算属性返回的对象是“未定义的”?
- parameters - SSIS - 通过所有项目更改对变量/参数的引用
- .net - 如何在 net472 上正确打包和使用具有多个运行时的 .NET Standard 库?
- mysql - 如何在其中存储带逗号的整数数据?
- gensim - Gensim 预测输出字函数语法
- angular - Internet Explorer 11 中未加载地理位置
- hadoop - Hadoop-3.1.2:Datanode 和 Nodemanager 关闭