2014-05-16 5 views
28

में मैं आरसेना से चरित्र वेक्टर एन्कोडिंग "अज्ञात" के लिए "UTF-8" आर

पाठ फ़ाइल से एन्कोड किया गया है जो मैं एक मेज पढ़ा (में चरित्र वेक्टर की असंगत एन्कोडिंग के साथ एक समस्या है Notepad++ के माध्यम से) UTF-8 में (मैंने के साथ भी कोशिश की।)।

मैं इस पाठ फ़ाइल से तालिका को पढ़ना चाहता हूं, इसे data.table पर परिवर्तित करें, key सेट करें और बाइनरी खोज का उपयोग करें। जब मैं ऐसा करने की कोशिश की, निम्नलिखित छपी:

चेतावनी संदेश: [.data.table में (poli.dt, "żżonymi", mult = "पहले"): ज्ञात एन्कोडिंग (latin1 या UTF-8) एक कॉलम कॉलम में पता चला था। data.table वर्तमान में बाइट्स की तुलना करता है, इसलिए मिश्रित एन्कोडिंग का समर्थन नहीं करता है; यानी, लैटिन 1 और यूटीएफ -8 दोनों का उपयोग करके, या यदि कोई अज्ञात एन्कोडिंग गैर-असीसी हैं और उनमें से कुछ को चिह्नित किया गया है और अन्य नहीं हैं। लेकिन अगर लैटिन 1 या यूटीएफ -8 का उपयोग विशेष रूप से किया जाता है, और सभी अज्ञात एन्कोडिंग एएससीआई हैं, तो परिणाम ठीक होना चाहिए। भविष्य में हम आपके लिए जांच करेंगे और अगर सब ठीक है तो हम इस चेतावनी से बचेंगे। मुश्किल हिस्सा एएससीआई-केवल मामलों के प्रदर्शन को प्रभावित किए बिना ऐसा कर रहा है।

और बाइनरी खोज काम नहीं करता है।

मैंने महसूस किया कि मेरी data.table - key स्तंभ दोनों के होते हैं: के साथ

> table(Encoding(poli.dt$word)) 
unknown UTF-8 
2061312 2739122 

मैं (एक data.table वस्तु बनाने से पहले) इस स्तंभ में परिवर्तित करने की कोशिश की: "अज्ञात" और "UTF-8" एन्कोडिंग प्रकार के उपयोग:

  • Encoding(word) <- "UTF-8"
  • word<- enc2utf8(word)

लेकिन बिना किसी प्रभाव के।

  • data.table::fread
  • utils::read.table
  • base::scan
  • colbycol::cbc.read.table
:

मैं भी कुछ अलग आर में एक फ़ाइल को पढ़ने के तरीके (बिल्कुल उपयोगी मानकों की स्थापना, जैसे encoding = "UTF-8") की कोशिश की

लेकिन साथ कोई प्रभाव नहीं।

============================================== ====

मेरा आर।संस्करण:

> R.version 
      _       
platform  x86_64-w64-mingw32   
arch   x86_64      
os    mingw32      
system   x86_64, mingw32    
status          
major   3       
minor   0.3       
year   2014       
month   03       
day   06       
svn rev  65126      
language  R       
version.string R version 3.0.3 (2014-03-06) 
nickname  Warm Puppy 

मेरे सत्र जानकारी:

> sessionInfo() 
R version 3.0.3 (2014-03-06) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=Polish_Poland.1250 LC_CTYPE=Polish_Poland.1250    LC_MONETARY=Polish_Poland.1250 
[4] LC_NUMERIC=C     LC_TIME=Polish_Poland.1250  

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

other attached packages: 
[1] data.table_1.9.2 colbycol_0.8  filehash_2.2-2 rJava_0.9-6  

loaded via a namespace (and not attached): 
[1] plyr_1.8.1  Rcpp_0.11.1 reshape2_1.2.2 stringr_0.6.2 tools_3.0.3 

उत्तर

31

Encoding फ़ंक्शन unknown एक चरित्र स्ट्रिंग (आपके मामले में सीपी -1250) एक "देशी एन्कोडिंग" निशान है अगर या अगर यह ASCII में है । इन दो मामलों के बीच भेद करने के लिए, फोन:

library(stringi) 
stri_enc_mark(poli.dt$word) 

कि प्रत्येक स्ट्रिंग वैध UTF-8 बाइट दृश्यों के होते हैं की जाँच करने के लिए, फोन:

all(stri_enc_isutf8(poli.dt$word)) 

यदि यह मामला अपनी फ़ाइल नहीं है, तो यूटीएफ -8 में बिल्कुल नहीं है।

मुझे संदेह है कि आपने फ़ाइल को पढ़ने के दौरान आर को निर्देश नहीं दिया है कि यह वास्तव में यूटीएफ -8 में है (यह इस कथन को सत्यापित करने के लिए poli.dt$word की सामग्री को देखने के लिए पर्याप्त होना चाहिए)। अगर मेरा अनुमान सही है, की कोशिश:

read.csv2(file("filename", encoding="UTF-8")) 

या

data.table अभी भी "मिश्रित" एन्कोडिंग के बारे में शिकायत
poli.dt$word <- stri_encode(poli.dt$word, "", "UTF-8") # re-mark encodings 

हैं, तो आप गैर- ASCII वर्ण लिप्यन्तरण कर सकते हैं, जैसे:

stri_trans_general("Zażółć gęślą jaźń", "Latin-ASCII") 
## [1] "Zazolc gesla jazn" 
+0

धन्यवाद! =) 'सभी (stri_enc_isutf8 (poli.dt $ शब्द) के परिणाम के अनुसार), ऐसा लगता है कि मेरी फाइल "यूटीएफ -8 में बिल्कुल नहीं है"। हालांकि, मैंने 'data.table' की बजाय 'हैश' तालिका ऑब्जेक्ट का उपयोग करके समस्या का प्रबंधन किया, जो मेरी विशेष समस्या में तेज़ी से दिखाई देता है और इसमें एंडकोडिंग के साथ ऐसी समस्याएं नहीं होती हैं। –

+0

कुछ महत्वपूर्ण बात यह है कि आर 127 से कम सभी बाइट कोडों को ASCII के रूप में आपके लोकेल में सबकुछ 'अज्ञात' के रूप में मानता है। –

+0

'stri_encode (str, from =" ", से =" UTF-8 ") 'मेरे लिए काम नहीं करता है, ऑब्जेक्ट' stri_enc_mark() 'का उपयोग करके' एन्कोडिंग() 'या" ASCII "के साथ" अज्ञात "लौटाता है। , "यूटीएफ -8" नहीं –

संबंधित मुद्दे