Jak powiedział Craig Ringer, ustawienie client_encoding
do windows-1252 prawdopodobnie nie jest najlepszą rzeczą do zrobienia. Rzeczywiście, jeśli pobierane dane zawierają jeden egzotyczny znak, masz kłopoty:
Z drugiej strony, nakłonienie środowiska R do używania Unicode może być niemożliwe (mam ten sam problem, co ty z Sys.setlocale
... To samo w to pytanie
też.).
Rozwiązaniem jest ręczne zadeklarowanie kodowania UTF-8 dla wszystkich danych za pomocą funkcji takiej jak ta:
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
}
Musisz używać tej funkcji we wszystkich swoich zapytaniach:
set_utf8(dbGetQuery(con, "SELECT myvar FROM mytable"))
EDYTUJ: Inną możliwością jest użycie RPostgres zamiast RPostgreSQL. Przetestowałem to (z taką samą konfiguracją jak w twoim pytaniu) i o ile widzę, wszystkie zadeklarowane kodowania są automatycznie ustawiane na UTF-8.