在R中读取XML时编码丢失

时间:2015-10-28 10:30:17

标签: r xml encoding utf-8 sdmx

我正在使用XML R包检索在线XML数据。我的问题是在调用xmlToList期间UTF-8编码丢失了:例如,'é'被'é'替换。这在XML解析期间发生。

这是一段代码片段,其中包含编码丢失的示例以及保留编码的另一个示例(取决于数据源):

library(XML)
library(RCurl)

url = "http://www.bdm.insee.fr/series/sdmx/data/DEFAILLANCES-ENT-FR-ACT/M.AZ+BE.BRUT+CVS-CJO?lastNObservations=2"
res <- getURL(url)
xmlToList(res)
# encoding lost

url2 = "http://www.bdm.insee.fr/series/sdmx/conceptscheme/"
res2 <- getURL(url2)
xmlToList(res2)
# encoding kept

为什么编码行为有所不同?我尝试在.encoding = "UTF-8"getURL设置enc2utf8(res),但这不会改变。

欢迎任何帮助!

谢谢,

的Jérémy

R version 3.2.1 (2015-06-18)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252   
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C                  
[5] LC_TIME=French_France.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RCurl_1.95-4.7 bitops_1.0-6   XML_3.98-1.3  

loaded via a namespace (and not attached):
[1] tools_3.2.1

1 个答案:

答案 0 :(得分:2)

您正在尝试阅读R中的SDMX文档。我建议使用rsdmx包,以便更轻松地阅读SDMX文档。该软件包在CRAN上可用,您也可以在Github上访问最新版本。

rsdmx允许您按fileurl阅读SDMX文档,例如

require(rsdmx)
sdmx = readSDMX("http://www.bdm.insee.fr/series/sdmx/data/DEFAILLANCES-ENT-FR-ACT/M.AZ+BE.BRUT+CVS-CJO?lastNObservations=2")
as.data.frame(sdmx)

另一种方法是将Web服务接口用于嵌入式数据提供程序,INSEE就是其中之一。尝试:

sdmx <- readSDMX(providerId = "INSEE", resource = "data",
                 flowRef = "DEFAILLANCES-ENT-FR-ACT",
                 key = "M.AZ+BE.BRUT+CVS-CJO", key.mode = "SDMX",
                 start = 2010, end = 2015)
as.data.frame(sdmx)

AFAIK该软件包还包含字符编码问题,但我正在研究一种解决方案,以便尽快在软件包中提供。调用getURL(file, .encoding="UTF-8")可以正确检索数据,但调用xml函数会丢失编码。

注意:我也看到你使用参数lastNObservations。目前,Web服务界面不支持额外的参数,但如果您需要,它可以很容易地使用。