2014-10-09 7 views
6

Varolan bir bağlantının encoding numarasını almanın (ve ayarlamanın) bir yolu var mı? Örneğin:Varolan bir bağlantı nesnesinin kodlamasını oku

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

özeti modunu listeler ve açılmış, ancak edilmişse değil bağlantı kullanan kodlama.

+0

Bir cevap bulmayı kolaylaştırmak için, bu özelliği bilmek ister misiniz? Dosyayı açtığınız anda bunu biliyordunuz, bu bilgiyi kodun bir bölümünde artık bu özelliği hatırlayamayacak şekilde mi kullanıyorsunuz? Kodun diğer "bağlantı" nesneleri türleri için çalışması gerekiyor mu? " – MrFlick

+0

Kullanıcının argüman olarak bir bağlantı nesnesini geçtiği bir işlev içinde buna ihtiyacım var. – Jeroen

+0

Belki de ['do_sumconnection'] 'ı değiştirmeyi deneyin (https://github.com/wch/r-source/blob/trunk/src/main/connections.c#L4910)? –

cevap

0

Yapman gerekeni iyi anladığımdan gerçekten emin değilim. Ama

  • bağlantısı kesinlikle dosyadan okumak gerekir diskin
  • varolan dosyaya ilişkili olduğunu varsayarak
  • Eğer belki dosyaya

Ardından yazmak istiyorum sen UTF-8 kodlamasını zorlamak için böyle bir şey yapabilirdiniz:

# 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" 

Önceki içeriğin UTF-8 kullanılarak kodlanıp kodlanmadığını kontrol etmek ya da başka bir hikaye olup olmadığını kontrol etmek için, bu sizin durumunuzda yararlı olabilir ya da olmayabilir.