2012-10-22 108 views
17

R中將包含非ASCII字符的字符(矢量)轉換爲html的首選方式是什麼?我想例如想轉換將字符轉換爲html中的R

"ü" 

"ü" 

我知道,這是可以通過一個巧妙的運用gsub(但有沒有人DOEN它一勞永逸?),我想包R2HTML會這樣做,但它不。

編輯:這是我結束了使用;它可明顯通過修改字典被擴展:

char2html <- function(x){ 
    dictionary <- data.frame(
    symbol = c("ä","ö","ü","Ä", "Ö", "Ü", "ß"), 
    html = c("&auml;","&ouml;", "&uuml;","&Auml;", 
      "&Ouml;", "&Uuml;","&szlig;")) 
    for(i in 1:dim(dictionary)[1]){ 
    x <- gsub(dictionary$symbol[i],dictionary$html[i],x) 
    } 
    x 
} 

x <- c("Buschwindröschen", "Weißdorn") 
char2html(x) 
+0

聽起來像這樣:http://stackoverflow.com/questions/5060076/convert-html-character-entity-encoding-in-r可能會指出你在正確的方向。 –

+2

Yepp,這是另一回合:)我剛剛檢查了XML包:它有一個'toHTML'函數,但是這並不能解決上述問題。這似乎是一件基本的事情:每一個所見即所得的html編輯器都可以做到這一點。 – Philipp

+0

出於好奇:爲什麼你仍然需要在UTF-8的年齡? – feeela

回答

1

XML使用方法insertEntities這一點,但該方法是內部的。因此,您可能需要自擔風險使用它,因爲不能保證在將來的版本中仍然可以像這樣操作。

現在,你的代碼可以使用

char2html <- function(x) XML:::insertEntities(x, c("ä"="auml", "ö"="ouml", …)) 

使用命名列表,而不是一個data.frame的感覺那種優雅的完成,但不改變核心的東西。在引擎蓋下,insertEntities以與您的代碼非常相似的方式調用gsub

如果數字HTML實體在您的環境中有效,那麼您可能會將所有文本轉換爲使用utf8ToInt的文本,然後將安全打印的ASCII字符轉換爲非轉義形式。這將爲您節省維護實體字典的麻煩。