2012-10-22 62 views
17

Cách ưa thích trong R để chuyển đổi một ký tự (vectơ) có chứa các ký tự không phải ASCII thành html là gì? Tôi xin ví dụ muốn chuyển đổiChuyển đổi ký tự thành html trong R

"ü" 

để

"ü" 

Tôi biết rằng điều này có thể do việc sử dụng thông minh của gsub (nhưng có ai doen nó một lần và cho tất cả?) Và tôi nghĩ rằng gói R2HTML sẽ làm điều đó, nhưng nó không.

EDIT: Dưới đây là những gì tôi đã sử dụng; nó rõ ràng có thể được mở rộng bằng cách sửa đổi từ điển:

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

Có vẻ như sau: http://stackoverflow.com/questions/5060076/convert-html-character-entity-encoding-in-r có thể chỉ cho bạn đúng hướng. –

+2

Yepp, đó là cách khác vòng :) Tôi chỉ cần kiểm tra các gói XML: nó có một chức năng 'toHTML', nhưng điều đó không giải quyết được câu hỏi trên. Nó có vẻ như một điều cơ bản để làm: mỗi trình soạn thảo html WYSIWYG có thể làm điều đó. – Philipp

+0

Chỉ vì tò mò: Tại sao bạn vẫn cần điều đó trong độ tuổi UTF-8? – feeela

Trả lời

1

Các XML sử dụng một phương pháp insertEntities cho điều này, nhưng phương pháp đó là nội bộ. Vì vậy, bạn có thể sử dụng nó có nguy cơ của riêng bạn, vì không có đảm bảo rằng nó sẽ vẫn hoạt động như thế này trong các phiên bản trong tương lai.

Ngay bây giờ, mã của bạn có thể được thực hiện bằng

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

Việc sử dụng một danh sách tên thay vì một data.frame cảm thấy loại tao nhã, nhưng không làm thay đổi cốt lõi của sự vật. Dưới mui xe, insertEntities gọi gsub giống như cách mã của bạn thực hiện.

Nếu các thực thể HTML số hợp lệ trong môi trường của bạn, thì bạn có thể chuyển đổi tất cả văn bản của mình thành văn bản sử dụng utf8ToInt và sau đó chuyển các ký tự ASCII có thể in trở lại thành dạng không thoát. Điều này sẽ giúp bạn tiết kiệm những rắc rối của việc duy trì một từ điển cho các thực thể của bạn.

Các vấn đề liên quan