Như Craig Ringer đã nói, thiết lập client_encoding
sang windows-1252 có lẽ không phải là điều tốt nhất để làm. Thật vậy, nếu dữ liệu bạn đang truy xuất chứa một ký tự kỳ lạ, bạn đang gặp rắc rối:
Mặt khác, việc sử dụng môi trường R của bạn để sử dụng Unicode có thể là không thể (Tôi gặp vấn đề giống bạn với Sys.setlocale
... Tương tự trong câu hỏi này
quá.).
Một cách giải quyết là khai báo mã hóa UTF-8 theo cách thủ công trên tất cả dữ liệu của bạn, sử dụng một hàm như sau:
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
}
Và bạn phải sử dụng chức năng này trong tất cả các truy vấn của mình:
set_utf8(dbGetQuery(con, "SELECT myvar FROM mytable"))
CHỈNH SỬA: Một khả năng khác là sử dụng RPostgres không ổn định của RPostgreSQL. Tôi đã thử nghiệm nó (với cùng một cấu hình như trong câu hỏi của bạn) và theo như tôi có thể thấy tất cả các mã hóa đã khai báo đều được tự động đặt thành UTF-8.