2014-10-09 7 views
6

क्या मौजूदा कनेक्शन के encoding प्राप्त करने (और सेट) करने का कोई तरीका है? उदाहरण के लिए:मौजूदा कनेक्शन ऑब्जेक्ट का एन्कोडिंग पढ़ें

con <- file(tempfile(), encoding = "UTF-8") 
summary(con) 

सारांश मोड सूचीबद्ध करता है और इसे खोला गया है, लेकिन एन्कोडिंग कि कनेक्शन का उपयोग करता नहीं।

+0

उत्तर खोजने के लिए इसे आसान बनाने के लिए, आप उस संपत्ति को क्या जानना चाहेंगे? मेरा मतलब है कि जब आप फ़ाइल खोलते हैं तो आप उसे जानते थे, क्या आप उस जानकारी का उपयोग कोड के उस हिस्से में कर रहे हैं जो अब उस संपत्ति को याद नहीं रख सकता है? क्या कोड को अन्य प्रकार के 'कनेक्शन' ऑब्जेक्ट्स के लिए काम करने की ज़रूरत है? – MrFlick

+0

मुझे इसे एक ऐसे फ़ंक्शन के भीतर चाहिए जहां उपयोगकर्ता एक कनेक्शन ऑब्जेक्ट को तर्क के रूप में पास करता है। – Jeroen

+0

शायद ['do_sumconnection'] (https://github.com/wch/r-source/blob/trunk/src/main/connections.c#L4910) को आजमाएं और संशोधित करें? –

उत्तर

0

मुझे सच में यकीन नहीं है कि मैं समझता हूं कि आपको क्या करना है। लेकिन यह सोचते हैं कि

  • कनेक्शन आप निश्चित रूप से फ़ाइल से पढ़ने की जरूरत है डिस्क
  • पर किसी मौजूदा फ़ाइल से संबंधित है
  • आप हो सकता है फाइल करने के लिए

फिर लिखना चाहते हैं आप अगर आप यूटीएफ -8 एन्कोडिंग को मजबूर करना चाहते हैं तो ऐसा कुछ कर सकता है:

# Hypothetical connection used by the user (file must exist on dist, hence 
# the "w" here 
con <- file(tempfile(), open = "w", encoding = "UTF-8") 

# recup the attributes of the existing connection 
con.attr <- summary(con) 

# build a list of parameters for a new connection that would replace 
# the original one 
newcon.attr <- list() 
newcon.attr["description"] <- con.attr$description 
newcon.attr["open"] <- paste0("r", ifelse(con.attr$'can write'=='yes', "+", "")) 
newcon.attr["encoding"] <- "UTF-8" 

# close the original connection, and create the new one 
close(con) 
newcon <- do.call(what = file, args = newcon.attr) 

# Check its attributes 
summary(newcon) 
# $description 
# [1] "C:\\Users\\...\\Temp\\Rtmpo9ykjo\\file54744993321b" 
# 
# $class 
# [1] "file" 
# 
# $mode 
# [1] "r+" 
# 
# $text 
# [1] "text" 
# 
# $opened 
# [1] "opened" 
# 
# $`can read` 
# [1] "yes" 
# 
# $`can write` 
# [1] "yes" 

यह जांचने के लिए कि क्या पिछली सामग्री यूटीएफ -8 का उपयोग करके एन्कोड किया गया था या नहीं, एक पूरी कहानी है, इसलिए यह आपके मामले में उपयोगी हो सकती है या नहीं भी हो सकती है।

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