2014-10-09 8 views
6

C'è un modo per ottenere (e impostare) lo encoding di una connessione esistente? Per esempio:Leggere la codifica di un oggetto di connessione esistente

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

Il riepilogo elenca il modo e se è stato aperto, ma non la codifica che la connessione utilizza.

+0

Per trovare più facilmente una risposta, cosa vorresti sapere per quale proprietà? Voglio dire, lo sapevi quando hai aperto il file, stai usando quelle informazioni in una parte del codice che non è più in grado di ricordare quella proprietà? Il codice deve funzionare per altri tipi di "connessione" "oggetti"? – MrFlick

+0

Ho bisogno di questo all'interno di una funzione in cui l'utente passa un oggetto di connessione come argomento. – Jeroen

+0

Forse provare a modificare ['do_sumconnection'] (https://github.com/wch/r-source/blob/trunk/src/main/connections.c#L4910)? –

risposta

0

Non sono sicuro di capire bene cosa devi fare. Ma supponendo che

  • il collegamento si riferisce ad un file esistente sul disco
  • è sicuramente bisogno di leggere dal file
  • si potrebbe voler scrivere sul file

Poi si potrebbe fare qualcosa di simile se si dovesse forzare la codifica UTF-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" 

Per verificare se il contenuto precedente è stato codificato utilizzando UTF-8 o no è tutta un'altra storia, quindi potrebbe essere utile o meno nel tuo caso.

Problemi correlati