2017-04-26 78 views
1

我下載了一個包含巴西城市列表的網頁。字符串來作爲載體如下將默認html編碼轉換爲R中的UTF-8或latin1

vector_cities = strsplit("Nova Lima,São Paulo,Contagem,Rio de Janeiro,Rio de Janeiro,São Paulo,Castanhal,Diadema,Rio de Janeiro,Rio Verde,Porto Alegre,Maurilândia,Samambaia,Rio de Janeiro,Passo Fundo,São Paulo,Casimiro de Abreu,Rio de Janeiro,Barueri,Santos,São Paulo,São Paulo,Goiânia,Pelotas,Rio de Janeiro", ",") 

vector_cities 
[1] "Nova Lima"   "São Paulo" "Contagem"   "Rio de Janeiro" "Rio de Janeiro" 
[6] "São Paulo" "Castanhal"   "Diadema"   "Rio de Janeiro" "Rio Verde"   
[11] "Porto Alegre"  "Maurilândia" "Samambaia"   "Rio de Janeiro" "Passo Fundo"  
[16] "São Paulo" "Casimiro de Abreu" "Rio de Janeiro" "Barueri"   "Santos"   
[21] "São Paulo" "São Paulo" "Goiânia"  "Pelotas"   "Rio de Janeiro" 

我瞭解上述特殊字符的編碼,因爲這是HTML的默認編碼,但是,我已經試過的

iconv(vector_cities, from = "anything", to = "anything") 

,他們許多排列例如,沒有返回S(代碼)o =São或Sao。調用Encoding(vector_cities)結果在以下

[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" 
[11] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" 
[21] "unknown" "unknown" "unknown" "unknown" "unknown" 

我缺少什麼?我是否必須改變字符串中的某些內容才能獲得正確的編碼?

+1

這可以幫助可能:http://stackoverflow.com/q/5060076/4137985 – Cath

回答

2

你可以做到以下幾點,我用stringi功能和自定義功能HTML#&轉換爲Unicode等效的,一個函數調用stri_trans_generalstringi幫我翻譯這些Unicode轉換爲英文字母。我已經採取了XML解析器從this鏈接SO本身

library(stringi) 
vector_cities = strsplit("Nova Lima,São Paulo,Contagem,Rio de Janeiro,Rio de Janeiro,São Paulo,Castanhal,Diadema,Rio de Janeiro,Rio Verde,Porto Alegre,Maurilândia,Samambaia,Rio de Janeiro,Passo Fundo,São Paulo,Casimiro de Abreu,Rio de Janeiro,Barueri,Santos,São Paulo,São Paulo,Goiânia,Pelotas,Rio de Janeiro", ",") 

vector_cities <- vector_cities[[1]] 

library(XML) 

html_txt <- function(str) { 
    xpathApply(htmlParse(str, asText=TRUE), 
      "//body//text()", 
      xmlValue)[[1]] 
} 

##The html_txt can parse the &#227 etc chars to their respective UTF values which can further be taken by stringi functions to convert into english alphabets 

x <- vector_cities 
txt <- html_txt(x) 
Encoding(txt) <- "UTF-8" #encoding to utf-8, It is optional you may avoid it 
splt_txt <-strsplit(txt,split="\n")[[1]] 
stringi::stri_trans_general(splt_txt, "latin-ascii") 

輸出:

[1] "Nova Lima"   "Sao Paulo"   
[3] "Contagem"   "Rio de Janeiro" 
[5] "Rio de Janeiro" "Sao Paulo"   
[7] "Castanhal"   "Diadema"   
[9] "Rio de Janeiro" "Rio Verde"   
[11] "Porto Alegre"  "Maurilandia"  
[13] "Samambaia"   "Rio de Janeiro" 
[15] "Passo Fundo"  "Sao Paulo"   
[17] "Casimiro de Abreu" "Rio de Janeiro" 
[19] "Barueri"   "Santos"   
[21] "Sao Paulo"   "Sao Paulo"   
[23] "Goiania"   "Pelotas"   
[25] "Rio de Janeiro" 
+1

注意: 'iconv(sapply(vector_cities [[1]],html_txt),「UTF-8」,「latin1」)'也適用,如果你不想加載另一個包 – Cath

+0

@Cath感謝您的輸入,但我收到字符而不是第二個向量。但是我知道在這種情況下使用編碼功能是沒有用的,但是stringi也沒有它。 – PKumar

+1

奇怪,它適用於我,可能不同的本地設置 – Cath

相關問題