2013-04-16 27 views
5

Tôi đã tạo ra một kịch bản dưới đây để chuyển đổi unicode thành ký tự Trung Quốc, chuỗi cuối cùng trong temp.df[,"name_unicode"] là "§ £" (không có báo giá), để mọi người không biết tiếng Trung Quốc cũng có thể giúp đỡ.unicode chuyển đổi và xuất khẩu trong R

library(RODBC) 
library(Unicode) 

temp.df <- data.frame(name_unicode=c("&#38515;&#22823;&#25991;", 
            "&#38515;&#23567;&#25935;", 
            "&#38515;&#19968;&#23665;", 
            "&#167;&#174;&#163;"), 
         stringsAsFactors=FALSE) 

temp.df[,"name_unicode_mod"] <- sapply(temp.df[,"name_unicode"], 
             function(x) { 
              temp <- unlist(strsplit(x,";")) 
              temp <- sprintf("%x",as.integer(gsub("[^0-9]","",temp))) 
              temp <- intToUtf8(as.u_char_range(temp)) 
              return(temp) 
              }) 


write.csv(temp.df,file("test.csv",encoding="UTF-8"),row.names=FALSE) 

Đầu ra cho temp.df[,"name_unicode_mod"] là OK cho R console. Nhưng tôi cần xuất chúng ra ở định dạng csv hoặc xls. Tôi đã thử write.csv, write.table, odbcConnectExcel trong RODBC nhưng tất cả mang lại cho tôi một cái gì đó như <U+00A7><U+00AE><U+00A3>.

Có ai giúp được không? Cảm ơn.

P.S. Tôi đang sử dụng R 3.0.0 và Win7

+0

Bạn đã thử sử dụng đối số 'encoding' trong hàm' write.table'? –

+2

đã thử: 'out <- file (" test.txt "," w ", encoding =" UTF-8 "); write.table (temp.df, out, row.names = FALSE); đóng (out) ' vẫn không thành công – lokheart

+2

+1 bởi vì tôi cảm thấy nỗi đau của bạn với mã hóa. –

Trả lời

5

Sử dụng tính năng viết nhị phân sẽ hoạt động đối với trường hợp của bạn. Sau đây là một mã mẫu nhỏ cần thực hiện.

writeUtf8csv <- function(x, file) { 
    con <- file(file, "wb") 
    apply(x, 1, function(a) { 
     b <- paste(paste(a, collapse=','), '\r\n', sep='') 
     writeBin(charToRaw(b), con, endian="little") 
    }) 
    close(con) 
} 

Chi tiết khác được hiển thị trong this reference page.

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