2

我正在使用XMLR 包检索在线 XML 数据。我的问题是 UTF-8 编码在调用过程中丢失xmlToList:例如,'é' 被 'é' 替换。这发生在 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和 toenc2utf8(res)但这并没有改变。

欢迎任何帮助!

谢谢,

热雷米

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
4

1 回答 1

2

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

rsdmx 允许您通过file或读取 SDMX 文档url,例如

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 服务接口不支持额外参数,但如果您需要,它可以很容易地使用。

于 2015-11-02T06:26:00.287 回答