आर

2012-05-20 17 views
8

में यूटीएफ -8 फ़ाइल आउटपुट मैं विंडोज 7 64-बिट पर आर 2.15.0 का उपयोग कर रहा हूं। मैं एक फ़ाइल में यूनिकोड (सीजेके) पाठ आउटपुट करना चाहता हूं।आर

निम्न कोड दिखाता है कि एक यूनिकोड वर्ण एक UTF-8 फ़ाइल कनेक्शन पर लिखने के लिए के रूप में काम नहीं करता भेजा (आई) की उम्मीद:

Read 1 item 
[1] "<U+5728>" 
:

rty <- file("test.txt",encoding="UTF-8") 
write("在", file=rty) 
close(rty) 
rty <- file("test.txt",encoding="UTF-8") 
scan(rty,what=character()) 
close(rty) 

स्कैन के उत्पादन द्वारा दिखाए गए

फ़ाइल यूटीएफ चरित्र के साथ ही नहीं लिखी गई थी, लेकिन कुछ प्रकार के एएनएसआई-अनुरूप फॉलबैक। क्या मैं इसे पहली बार सही तरीके से काम कर सकता हूं (यानी एक टेक्स्ट फ़ाइल के साथ जिसमें "इसमें" है), या क्या मैं कोड स्ट्रिंग को बदलने वाले उचित चरित्र के साथ आउटपुट को यूनिकोड में परिवर्तित करने के लिए कुछ अतिरिक्त जादू कर सकता हूं?

धन्यवाद।

[अधिक जानकारी: एक ही कोड ठीक से सिग्विन, आर 2.14.2 में व्यवहार करता है, जबकि Win7 पर 2.14.2 भी टूटा हुआ है। मेरी अंत पर इस कहीं है?]

+0

[बेले गए अपडेट] मुद्दे एन्कोडिंग के बजाय * लोकेल * के साथ होते हैं। मैंने अस्थायी रूप से लोकेल को कुछ "उचित" में बदलकर गड़बड़ी के आउटपुट मुद्दों का समाधान किया है। यदि आपके पास एक से अधिक लोकेल से भाषा डेटा है तो भगवान आपकी मदद करते हैं। – Patrick

+0

शायद यह [पोस्ट] (http://stackoverflow.com/questions/11069908/r-extracting-clean-utf-8-text-from-a-web-page-scraped-with-rcurl?lq=1) मदद। – DJJ

उत्तर

8

बचाता पाठ फ़ाइल में UTF-8 तार:

kLogFileName <- "parser.log" 
log <- function(msg="") { 
    con <- file(kLogFileName, "a") 
    tryCatch({ 
    cat(iconv(msg, to="UTF-8"), file=con, sep="\n") 
    }, 
    finally = { 
    close(con) 
    }) 
} 
+0

क्या यह हालिया आर संस्करणों में टूट गया? जब मैं फ़ाइलों को इस तरह लिखता हूं, तो मुझे अभी भी सही फ़ाइल सामग्री प्राप्त करने के लिए "एएनएसआई" में रीडलाइन के एन्कोडिंग पैरामीटर को सेट करना होगा। यूटीएफ -8 एन्कोडिंग के तहत "\ xe0" के रूप में एक उदाहरण "à" आ रहा है, लेकिन फ़ाइल के रीडलाइनों का उपयोग करते समय एएनएसआई एन्कोडिंग के तहत सही ढंग से – dimpol

+0

@ डिंपोल - क्या यह अंत में आपके लिए काम करता है? – Curious

+0

@ क्रूर - नहीं, मैं इसे नोटपैड ++ का उपयोग करके मैन्युअल रूप से कर रहा हूं।मुझे केवल एक डेटासेट में फ़ाइलों के लिए इसे करने की आवश्यकता थी और यह केवल बुलेट को काटने और आर फ़ाइल-एन्कोडिंग के साथ गड़बड़ रखने के लिए मैन्युअल रूप से करने के लिए तेज़ था। – dimpol

0

मुझे लगता है कि आप समस्या हो रही है क्योंकि write निर्माण किया है इतना है कि यह नाम एक वस्तु का लेता है और आप इस तरह के एक नामित वस्तु का निर्माण करने के लिए नहीं दिखाई देते। इसके बजाय इसे आजमाएं:

txt <- "在" 
rty <- file("test.txt",encoding="UTF-8") 
write(txt, file=rty) 
close(rty) 
rty <- file("test.txt",encoding="UTF-8") 
inp <- scan(rty,what=character()) 
#Read 1 item 
close(rty) 
inp 
#[1] "在" 
+0

एचएम, मूल अनुप्रयोग जो इस्तेमाल किए गए ऑब्जेक्ट्स के ऊपर न्यूनतम स्निपेट को प्रेरित करता है। इसके अलावा आप ऊपर दिए गए कोड के लिए मेरे जैसा ही परिणाम उत्पन्न करते हैं। शायद मेरे पास मूल एन्कोडिंग समस्या है? – Patrick

0

मुझे यूबीएफ -8 तारों के साथ ऐसी समस्या है जो डीबी से आती है।

एकमात्र तरीका जिसे मैंने उन्हें सही ढंग से सहेजने के लिए पाया है, बाइनरी मोड में फ़ाइल को सहेज रहा है।

F <- file(file.name, "wb") 
    tryCatch({ 
    writeBin(charToRaw(the_utf8_str), F) 
    }, 
    finally = { 
    close(F) 
    }) 
9

समस्या की वजह से है कुछ आर विंडोज विशेष व्यवहार (डिफ़ॉल्ट प्रणाली कोडिंग का उपयोग कर/या कुछ प्रणाली लिखने का उपयोग कर कार्य; मैं विशिष्टताओं को नहीं जानता लेकिन व्यवहार वास्तव में ज्ञात है)

विंडोज़ पर टेक्स्ट यूटीएफ 8 एन्कोडिंग लिखने के लिए कार्यों में useBytes=T विकल्प का उपयोग करना होगा के लिखने के लिए या रीडलाइन:

txt <- "在" 
writeLines(txt, "test.txt", useBytes=T) 

readLines("test.txt", encoding="UTF-8") 
[1] "在" 
+0

धन्यवाद! यह मेरे लिए काम किया। वहाँ बहुत अपूर्ण सलाह है। – Ruben