sql >> Base de Datos >  >> RDS >> PostgreSQL

Codificación de texto UTF-8/Unicode con RPostgreSQL

Como dijo Craig Ringer, configurar client_encoding a Windows-1252 probablemente no sea lo mejor que se puede hacer. De hecho, si los datos que está recuperando contienen un solo carácter exótico, tiene problemas:

Por otro lado, hacer que su entorno R use Unicode podría ser imposible (tengo el mismo problema que usted con Sys.setlocale ... Lo mismo en esta pregunta también.).

Una solución es declarar manualmente la codificación UTF-8 en todos sus datos, usando una función como esta:

set_utf8 <- function(x) {
  # Declare UTF-8 encoding on all character columns:
  chr <- sapply(x, is.character)
  x[, chr] <- lapply(x[, chr, drop = FALSE], `Encoding<-`, "UTF-8")
  # Same on column names:
  Encoding(names(x)) <- "UTF-8"
  x
}

Y tienes que usar esta función en todas tus consultas:

set_utf8(dbGetQuery(con, "SELECT myvar FROM mytable"))

EDITAR: Otra posibilidad es usar RPostgres en lugar de RPostgreSQL. Lo probé (con la misma configuración que en su pregunta) y, por lo que puedo ver, todas las codificaciones declaradas se configuran automáticamente en UTF-8.