在R中将字符转换为html

时间:2012-10-22 19:40:32

标签: html r

将包含非ASCII字符的字符(向量)转换为html的首选方法是什么?我想举例来说转换

  "ü"

  "ü"

我知道这可以通过巧妙地使用gsub(但是有没有人一劳永逸地做过它?)而且我认为R2HTML包可以做到这一点,但事实并非如此。< / p> 编辑:这是我最终使用的;显然可以通过修改字典来扩展它:

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)

2 个答案:

答案 0 :(得分:1)

XML为此使用方法insertEntities,但该方法是内部的。因此,您可以自担风险使用它,因为无法保证在将来的版本中它将保持这样运行。

现在,您的代码可以使用

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

使用命名列表而不是data.frame感觉很优雅,但不会改变事物的核心。在幕后,insertEntities以与代码相同的方式调用gsub

如果数字HTML实体在您的环境中有效,那么您可以将所有文本转换为使用utf8ToInt的文本,然后将安全可打印的ASCII字符转换回非转义形式。这样可以省去为实体维护字典的麻烦。

答案 1 :(得分:0)

这个问题已经很老了,但是我找不到任何直接的答案...因此,我想到了这个简单的函数,该函数使用数字html代码并适用于LATIN 1 - Supplement(整数值161至255)。某些软件包中可能(肯定有?)函数可以对其进行更彻底的处理,但是对于许多应用程序来说,下面的内容可能就足够了……

<jobs>
{
    for $job in jobs/job
    group by $company := $job/company
    return $job[1]
}
</jobs>