2012-10-22 19 views
17

Jaki jest preferowany sposób w R, aby konwertować znak (wektor) zawierający znaki spoza ASCII do html? Ja na przykład lubię do konwersjiKonwertuj znak na html w R

"ü" 

do

"ü" 

Zdaję sobie sprawę, że jest to możliwe za pomocą sprytnego wykorzystania gsub (ale czy ktoś doen go raz na zawsze?) i pomyślałem, że pakiet R2HTML to zrobi, ale tak nie jest.

EDYCJA: Oto, czego użyłem; może oczywiście zostać przedłużony przez modyfikację słownik:

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

To brzmi tak: http://stackoverflow.com/questions/5060076/convert-html-character-entity-encoding-in-r może wskazać ci właściwy kierunek. –

+2

Yepp, to odwrotnie :) Właśnie sprawdziłem pakiet XML: ma on funkcję 'toHTML', ale to nie rozwiązuje powyższego pytania. Wydaje się, że tak podstawową rzeczą jest to, że każdy edytor HTML WYSIWYG może to zrobić. – Philipp

+0

Po prostu z ciekawości: dlaczego wciąż potrzebujesz tego w wieku UTF-8? – feeela

Odpowiedz

1

XML wykorzystuje metodę insertEntities do tego, lecz ta metoda jest wewnętrzne. Możesz więc używać go na własne ryzyko, ponieważ nie ma gwarancji, że pozostanie ono działać w ten sposób w przyszłych wersjach.

Teraz, kod może być dokonane za pomocą

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

użycie nazwie listy zamiast data.frame czuje niby elegancki, ale nie zmienia istotę rzeczy. Pod maską, insertEntities dzwoni gsub w podobny sposób jak twój kod.

Jeśli numeryczne encje HTML są poprawne w twoim środowisku, możesz prawdopodobnie przekonwertować cały tekst na te, używając utf8ToInt, a następnie przekształcić bezpiecznie drukowane znaki ASCII z powrotem w formę bez znaku. To zaoszczędziłoby ci kłopotu z utrzymaniem słownika dla twoich bytów.