2012-07-06 14 views
7

मेरे पास एक सीएसवी में विदेशी देशों के लेखक नामों का एक समूह है जो आर ठीक से पढ़ता है। मैं उन्हें मैकेनिकल तुर्क (जो वास्तव में एक अंतरराष्ट्रीयकृत चरित्र भी पसंद नहीं करता) पर अपलोड करने के लिए उन्हें साफ़ करने की कोशिश कर रहा हूं। ऐसा करने में, मैं एक सवाल (बाद में तैनात किया जाना है) है, लेकिन मैं भी dput उन्हें एक समझदार तरीके से नहीं कर सकते हैं:अंतर्राष्ट्रीयकृत टेक्स्ट को सही तरीके से कैसे दबाएं?

> dput(df[306,"primauthfirstname"]) 
"Gwena\xeblle M" 
> test <- "Gwena\xeblle M" 
<simpleError in nchar(val): invalid multibyte string 1> 

दूसरे शब्दों में, dput काम करता है ठीक है, लेकिन परिणाम चिपकाने में विफल रहता है में । dput क्यों प्रतिलिपि/चिपकाने की अनुमति देने के लिए जरूरी जानकारी आउटपुट नहीं करता है (संभवतया इसे करने की आवश्यकता है एन्कोडिंग विशेषता संरचना विवरण?)। मैं ऐसा करने के लिए कैसे प्राप्त करूं?

ध्यान दें कि \xeb मान्य वर्ण जहाँ तक आर संबंध है:

> gsub("\xeb","", turk.df[306,"primauthfirstname"]) 
[1] "Gwenalle M" 

लेकिन है कि आप व्यक्तिगत रूप से पात्रों का मूल्यांकन नहीं कर सकते हैं - यह हेक्स कोड है \ x ## या कुछ भी नहीं:

> gsub("\\x","", turk.df[306,"primauthfirstname"]) 
[1] "Gwena\xeblle M" 
+3

यह मेरे लिए ठीक काम करता है: '(test <-" Gwena \ xeblle M ") 'उपज' [1]" Gwenaëlle M "'। मैं आर 2.14.0 का उपयोग 'LANG = en_US.UTF-8' के साथ कर रहा हूं। –

+0

@ माइकल हॉफमैन 'लैनजी' टुकड़ा क्या है? मैं इसे कैसे देखूं? –

+0

यह एक पर्यावरण चर है। 'Sys.getenv (" LANG ") आज़माएं। आर का क्या संस्करण आप उपयोग कर रहे हैं? –

उत्तर

1

dput() का हेल्पपेज कहता है: "आर ऑब्जेक्ट का एएससीआईआईआई टेक्स्ट प्रतिनिधित्व लिखता है"। इसलिए यदि आपके ऑब्जेक्ट में गैर-ASCII वर्ण हैं, तो इन्हें प्रदर्शित नहीं किया जा सकता है और किसी भी तरह परिवर्तित किया जाना चाहिए।

तो मैं आपको आईएनजी से पहले अपने वेक्टर को बदलने के लिए iconv() का उपयोग करने का सुझाव दूंगा। एक दृष्टिकोण है:

> test <- "Gwena\xeblle M" 
> out <- iconv(test, from="latin1", to="ASCII", sub="byte") 
> out 
[1] "Gwena<eb>lle M" 
> gsub('<eb>', 'ë', out) 
[1] "Gwenaëlle M" 

, जैसा कि आप देखते हैं, दोनों तरीकों से काम करता है। बाद में आप gsub() का उपयोग बैक-कन्वर्ट बाइट्स में वर्णों में कर सकते हैं (यदि आपका एन्कोडिंग इसका समर्थन करता है, उदाहरण के लिए utf-8)।

दूसरा दृष्टिकोण सरल है (और मैं अपनी आवश्यकताओं के लिए बेहतर लगता है), लेकिन एक तरह से काम करता है और अपने libiconv इसका समर्थन नहीं कर सकते हैं:

> test <- "Gwena\xeblle M" 
> iconv(test, from="latin1", to="ASCII//TRANSLIT") 
[1] "Gwenaelle M" 

आशा इस मदद करता है!

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