2013-11-09 14 views
18
'dan aktarın

R, Unicode karakterlerini dahili olarak iyi işliyor gibi gözükse de, R için bu tür UTF-8 Unicode karakterleriyle bir veri çerçevesi oluşturamıyorum. Bunu zorlamanın bir yolu var mı?UTF-8 dosyalarını R

data.frame(c("hīersumian","ǣmettigan"))->test 
write.table(test,"test.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") 

çıktı metin dosyası okur: Bir Windows ortamında (Windows 7) R versiyonu 3.0.2 kullanıyorum

hiersumian <U+01E3>mettigan

. Ona R UTF-8 dosyayı doğru yazıyor cevaplarında öne sürülmüştür, ve Sorun dosyasını görüntülemek için kullanıyorum yazılımı ile yattığını


DÜZENLEME. İşte burada her şeyi yaptığım bir kod var. UTF-8'de kodlanmış bir metin dosyasında okuyor ve R doğru okuyor. Daha sonra R, dosyayı UTF-8'de yazar ve tekrar okur ve şimdi doğru Unicode karakterleri gider.

read.table("myinputfile.txt",encoding="UTF-8")->myinputfile 
myinputfile[1,1] 
write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") 
read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile 
myoutputfile[1,1] 

Konsol çıkışı:

Bu "cevap" garip bir şey perde arkasında neler olduğunu ayrıntılı açıklamalar yapılması oldukça vermektedir
> read.table("myinputfile.txt",encoding="UTF-8")->myinputfile 
> myinputfile[1,1] 
[1] hīersumian 
Levels: hīersumian ǣmettigan 
> write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") 
> read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile 
> myoutputfile[1,1] 
[1] <U+FEFF>hiersumian 
Levels: <U+01E3>mettigan <U+FEFF>hiersumian 
> 
+0

eserleri Dosyayı terminalde, vi veya emacs'de görüntülerken (Ubuntu 12.04'te R-devel). –

+0

@BenBolker Bu, bu sorunun R'nin Windows sürümüne özgü olduğu anlamına mı geliyor? – Sverre

+1

Açıklamak gerekirse: bu Windows'a özgü bir sorundur. OS X'de sonuç doğrulanabilir. 'test.txt 'dosyası, test.txt: UTF-8 Unicode metni ile cevap verir. Bir hexdump doğru baytları gösterir. İyi yazılmış bir soru olsa da. –

cevap

7

:

"hīersumian" bile yapmaz veri çerçevesine öyle görünüyor. "Ī" -sayı, tüm durumlarda "i" ye dönüştürülür.

options("encoding" = "native.enc") 
t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) 
t1 
#    a 
# 1 hiersumian 

options("encoding" = "UTF-8") 
t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) 
t1 
#    a 
# 1 hiersumian 

options("encoding" = "UTF-16") 
t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) 
t1 
#    a 
# 1 hiersumian 

şu dizisi başarıyla metin dosyasına "ǣmettigan" yazıyor: O " "UTF-8" veya "kodlama" ile çalışmak gitmiyor

t2 <- data.frame(a = c("ǣmettigan"), stringsAsFactors=F) 

getOption("encoding") 
# [1] "native.enc" 

Encoding(t2[,"a"]) <- "UTF-16" 

write.table(t2,"test.txt",row.names=F,col.names=F,quote=F) 

enter image description here

UTF-16 "ve ayrıca" fileEncoding "i belirtmek ya bir hataya ya da hiçbir çıkışa yol açmaz.

Şimdiye kadar biraz hayal kırıklığı yaratan tüm Unicode sorunlarını bir şekilde çözmeyi başardım.

+0

"write.table" yine de başarısız görünüyor Makinem (Ubuntu), "hersersyen" in otomatik dönüşümü artık geçerli olan R (3.3.2) sürümünde bir sorun olarak görünmüyor – MichaelChirico

1

bir şey OS özgü eksik ama hayır bu sorun (ya da bu soru aslında bu yana Ar iç yapısına bir güncelleme var belki daha olası) olması data.table görünür edilebilir: Benim için

t1 = data.table(a = c("hīersumian", "ǣmettigan")) 
tmp = tempfile() 
fwrite(t1, tmp) 
system(paste('cat', tmp)) 
# a 
# hīersumian 
# ǣmettigan 
fread(tmp) 
#    a 
# 1: hīersumian 
# 2: ǣmettigan