2015-10-11 19 views
5

Bunun bir hata olup olmadığından emin değilim. Ham ve geri dönüştürmeden önce karakterlerden birini UTF-8 olarak kodlarsam, karakterler aynı olmaz. RStudio'da "UTF-8" için varsayılan kodlamayı ayarladım.Kodlama ve işlenmemiş kodlar R

rawToChar(charToRaw(enc2utf8("vægt"))) 
[1] "vægt" 

rawToChar(charToRaw("vægt")) 
[1] "vægt" 

İşte()

R version 3.2.2 (2015-08-14) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252 LC_MONETARY=Danish_Denmark.1252 
[4] LC_NUMERIC=C     LC_TIME=Danish_Denmark.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggthemes_2.2.1 TTR_0.23-0  lubridate_1.3.3 tidyr_0.2.0  skm_1.0.2  ggplot2_1.0.1 dplyr_0.4.3  
[8] stringr_1.0.0 dkstat_0.08  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.1  rstudioapi_0.3.1 magrittr_1.5  MASS_7.3-43  munsell_0.4.2 lattice_0.20-33 
[7] colorspace_1.2-6 R6_2.1.1   httr_1.0.0  plyr_1.8.3  xts_0.9-7  tools_3.2.2  
[13] parallel_3.2.2 grid_3.2.2  gtable_0.1.2  DBI_0.3.1  lazyeval_0.1.10 assertthat_0.1 
[19] digest_0.6.8  reshape2_1.4.1 curl_0.9.3  memoise_0.2.1 labeling_0.3  stringi_0.5-5 
[25] scales_0.3.0  jsonlite_0.9.17 zoo_1.7-12  proto_0.3-10  
+2

Windows 10 makinemde doğrulandı ama Linux makinemde iyi çalışıyor. –

+1

Sanırım bu bir Windows sorunu. – KERO

+0

Bu, farklı xml paketlerini kullanırken karşılaştığım bir sorundur. Herkes neden x2 paketlerinde charToRaw önce enc2utf8 ihtiyaç olduğunu açıklayabilir mi? Yazarlar adına konuşamazsınız ama sadece neden yapıldığını anlamak istiyorum ve eğer enc2utf8'in çok yeni sorunlara yol açmadan kaldırılabileceğini önerebilirsem. – KERO

cevap

5

Burada neler oluyor benim temel anlayış var benim sessionInfo olduğunu.

İlk bazı kodlama gerçekler:

Şimdi
    Encoding 
character UTF-8  CP1252 
    v   76    76 
    æ   c3 a6   e6 
    g   67    67 
    t   74    74 
    Ã   c3 83   c3 
    ¦   c2 a6   a6 

mekaniği: sessionInfo çıkışından görülebileceği gibi

Windows makine CP1252 kodlamayı kullanır. Böylece R betiğindeki vægt dizesi 76 e6 67 74 baytları olarak temsil edilir. Bu charToRaw("vægt") tarafından onaylanmıştır. Daha sonra onu UTF-8'e dönüştürürsek, 76 c3 a6 67 74 elde ederiz. Bu baytların UTF-8'i temsil ettiği gerçeği kaybolur. Daha sonra rawToChar(), bu baytları tekrar CP1252 varsayarak bir dizeye dönüştürür. c3à ve a6 CP1252'de ¦ olduğundan, vægt elde ederiz.

Mac ve Linux'ta, diğer yandan, varsayılan kodlama UTF-8 boyuncadır ve kodlama uyuşmazlıkları oluşmaz. Bununla birlikte, Windows'da olduğu gibi, aynı fenomenin, bu kodun bir hata olduğunu düşünmüyorum.

+0

Açıklama için teşekkür ederiz! Şimdi bu satırı "rawToChar" yardımında anladığımı düşünüyorum: _italic_ Her iki durumda da, çok baytlı bir yerel ayarda geçersiz olan bir sonuç oluşturmak mümkündür, ör. UTF-8 kullanarak. _italic_ Bu konuda yapabileceğim fazla bir şey yok çünkü sadece R için Windows'daki yerel ayarları değiştiremiyorum (bu işten aldığım bir bilgisayar, bu yüzden dili değiştiremiyorum)? – KERO

İlgili konular