आर

2015-10-11 13 views
5

में एन्कोडिंग और कच्चे मुझे यकीन नहीं है कि यह एक बग है या नहीं। यदि मैं कच्चे और फिर से परिवर्तित करने से पहले वर्णों में से एक को यूटीएफ -8 में एन्कोड करता हूं, तो वर्ण समान नहीं होते हैं। मैंने RStudio में "यूटीएफ -8" में डिफ़ॉल्ट एन्कोडिंग सेट की है।आर

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

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

यहाँ मेरी sessionInfo()

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

मेरी विंडोज 10 मशीन पर पुष्टि की लेकिन मेरी लिनक्स मशीन पर ठीक काम करता है। –

+1

मुझे लगता है कि यह एक विंडोज़ केवल मुद्दा है। – KERO

+0

यह एक मुद्दा है जिसे मैं विभिन्न XML पैकेजों का उपयोग करते समय चलाता हूं। क्या कोई यह बता सकता है कि xml संकुल में charToRaw से पहले enc2utf8 की आवश्यकता क्यों है? आप लेखकों की तरफ से बात नहीं कर सकते हैं, लेकिन मैं सिर्फ यह समझना चाहता हूं कि यह क्यों किया गया है और यदि मैं सुझाव दे सकता हूं कि इसके बिना enc2utf8 को हटा दिया गया है तो बहुत सारे नए मुद्दे सामने आते हैं। – KERO

उत्तर

5

यहाँ क्या हो रहा है की मेरी बुनियादी समझ है।

पहले कुछ एन्कोडिंग तथ्य:

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

अब यांत्रिकी:

Windows मशीन CP1252 एन्कोडिंग का उपयोग करता के रूप में sessionInfo उत्पादन से देखा जा सकता। इसलिए आर स्क्रिप्ट में vægt स्ट्रिंग बाइट्स 76 e6 67 74 के रूप में दर्शायी जाती है। यह charToRaw("vægt") द्वारा पुष्टि की गई है। यदि हम इसे यूटीएफ -8 में परिवर्तित करते हैं, तो हमें 76 c3 a6 67 74 मिल जाता है। तथ्य यह है कि इन बाइट्स यूटीएफ -8 का प्रतिनिधित्व करते हैं। बाद में rawToChar() इन बाइट्स को एक स्ट्रिंग में वापस परिवर्तित करता है, फिर से CP1252 मानता है। चूंकि c3à और a6 सीपी 1252 में ¦ है, तो हमें vægt मिल गया है।

मैक और लिनक्स पर, दूसरी ओर, डिफ़ॉल्ट एन्कोडिंग पूरे यूटीएफ -8 है और एन्कोडिंग विसंगतियां नहीं होती हैं। मुझे संदेह है कि, विंडोज़ पर एक ही घटना को आर

द्वारा उपयोग किए गए एन्कोडिंग को स्पष्ट रूप से बदलकर/सेटिंग करके ट्रिगर किया जा सकता है। मुझे नहीं लगता कि यह एक बग है।

+0

स्पष्टीकरण के लिए धन्यवाद! अब मुझे लगता है कि मैं 'rawToChar' में मदद से इस पंक्ति को समझता हूं: _italic_ किसी भी मामले में एक परिणाम बनाना संभव है जो मल्टीबाइट लोकेल में अमान्य है, उदा। एक यूटीएफ -8 का उपयोग कर। _italic_ इसके बारे में मैं इतना कुछ नहीं कर सकता क्योंकि मैं विंडोज़ में लोकेल को आर के लिए नहीं बदल सकता (यह एक कंप्यूटर है जो मुझे काम से मिला है, इसलिए मैं भाषा नहीं बदल सकता)? – KERO