嘗試解析來自墨西哥參議院的參議院聲明,但無法處理網頁的UTF-8編碼。R的UTF-8編碼問題
這個網站來通過明確:
library(rvest)
Senate<-html("http://comunicacion.senado.gob.mx/index.php/informacion/versiones/19675-version-estenografica-de-la-reunion-ordinaria-de-las-comisiones-unidas-de-puntos-constitucionales-de-anticorrupcion-y-participacion-ciudadana-y-de-estudios-legislativos-segunda.html")
這裏有點網頁的例子:
"CONTINÚA EL SENADOR CORRAL JURADO: Nosotros decimos. Entonces, bueno, el tema es que hay dos rutas señor presidente y también tratar, por ejemplo, de forzar ahora. Una decisión de pre dictamen a lo mejor lo único que va a hacer es complicar más las cosas."
可以看出,無論是口音和「N」來通過精。
問題出現在其他一些htmls(同一個域!)中。例如:
Senate2<-html("http://comunicacion.senado.gob.mx/index.php/informacion/versiones/14694-version-estenografica-de-la-sesion-de-la-comision-permanente-celebrada-el-13-de-agosto-de-2014.html")
我得到:
"-EL C. DIPUTADO ADAME ALEMÃÂN: En consecuencia está a discusión la propuesta. Y para hablar sobre este asunto, se le concede el uso de la palabra a la senadora…….."
在這第二件我試過的iconv()和強迫對HTML編碼參數()來編碼= 「UTF-8」,但保持獲得相同的結果。
我也檢查了使用W3 Validator的網頁編碼,它似乎是UTF-8,沒有問題。
使用GSUB似乎並不有效,因爲編碼下載具有相同的「碼」不同的人物:
í - ÃÂ
á - ÃÂ
ó - ÃÂ
相當多的新鮮的想法。
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] grDevices utils datasets graphics stats grid methods base
other attached packages:
[1] stringi_0.4-1 magrittr_1.5 selectr_0.2-3 rvest_0.2.0 ggplot2_1.0.0 geosphere_1.3-11 fields_7.1
[8] maps_2.3-9 spam_1.0-1 sp_1.0-17 SOAR_0.99-11 data.table_1.9.4 reshape2_1.4.1 xlsx_0.5.7
[15] xlsxjars_0.6.1 rJava_0.9-6
loaded via a namespace (and not attached):
[1] bitops_1.0-6 chron_2.3-45 colorspace_1.2-4 digest_0.6.8 evaluate_0.5.5 formatR_1.0 gtable_0.1.2
[8] httr_0.6.1 knitr_1.8 lattice_0.20-29 MASS_7.3-35 munsell_0.4.2 plotly_0.5.17 plyr_1.8.1
[15] proto_0.3-10 Rcpp_0.11.3 RCurl_1.95-4.5 RJSONIO_1.3-0 scales_0.2.4 stringr_0.6.2 tools_3.1.2
[22] XML_3.98-1.1
UPDATE: 這似乎是這個問題:
stri_enc_mark(Senate2)
[1] "ASCII" "latin1" "latin1" "ASCII" "ASCII" "latin1" "ASCII" "ASCII" "latin1"
...等等。很顯然,問題在拉丁語言中:
stri_enc_isutf8(texto2)
[1] TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
如何強制latin1糾正UTF-8字符串?當由stringi「翻譯」它似乎做錯了,給我前面描述的問題。
@Pascal:「我試過iconv()並強制將html()的編碼參數設爲encoding =」UTF-8「,但一直得到相同的結果。」 – eflores89 2015-04-01 06:46:16