R中将包含非ASCII字符的字符(向量)转换为html的首选方法是什么?我想比如转换
"ü"
至
"ü"
我知道这可以通过巧妙地使用gsub
(但是有没有人一劳永逸地做过它?)而且我认为包R2HTML会这样做,但事实并非如此。
编辑:这是我最终使用的;通过修改字典显然可以扩展它:
char2html <- function(x){
dictionary <- data.frame(
symbol = c("ä","ö","ü","Ä", "Ö", "Ü", "ß"),
html = c("ä","ö", "ü","Ä",
"Ö", "Ü","ß"))
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)
XML
为此使用了insertEntities
方法,但该方法是内部的。因此,您可以自担风险使用它,因为无法保证在将来的版本中它将保持这样的运行状态。
现在,您的代码可以使用完成
char2html <- function(x) XML:::insertEntities(x, c("ä"="auml", "ö"="ouml", …))
使用命名列表而不是data.frame感觉很优雅,但不会改变事物的核心。在引擎盖下,insertEntities
称gsub
与你的代码完全相同。
如果数字HTML实体在您的环境中有效,那么您可以将所有文本转换为使用utf8ToInt
的文本,然后将安全可打印的ASCII字符转换回非转义形式。这样可以省去维护实体字典的麻烦。
这个问题很老了,但我找不到任何简单的答案......所以我想出了这个简单的函数,它使用数字html代码,适用于LATIN 1 - Supplement(整数值161到255)。可能(当然?)某个软件包中的一个函数可以更彻底地完成它,但是对于许多应用程序而言,下面的内容可能已经足够了......
conv_latinsupp <- function(...) {
out <- character()
for (s in list(...)) {
splitted <- unlist(strsplit(s, ""))
intvalues <- utf8ToInt(enc2utf8(s))
pos_to_modify <- which(intvalues >=161 & intvalues <= 255)
splitted[pos_to_modify] <- paste0("�", intvalues[pos_to_modify], ";")
out <- c(out, paste0(splitted, collapse = ""))
}
out
}
conv_latinsupp("aeiou", "àéïôù12345")
## [1] "aeiou" "àéïôù12345"