У нас есть база данных и R-скрипты, работающие на разных виртуальных машинах. Сначала мы подключаемся к db
con <- dbConnect(
odbc(),
Driver = "SQL Server",
Server = "server", Database = "db", UID = "uid", PWD = "pwd",
encoding = "UTF-8"
)
и собираем данные
data <- dbGetQuery(con, "SELECT * FROM TableName")
Проблема заключается в следующем: когда на разных машинах выполняется один и тот же скрипт, для некоторых из них мы сталкиваемся с проблемами кодирования символьных переменных .
Например, это то, что мы имеем на машине A
> data$char_var[1]
[1] "фамилия"
> Encoding(data$char_var[1])
[1] "UTF-8"
> Sys.getlocale()
[1] "LC_COLLATE=Russian_Russia.1251;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=Russian_Russia.1251;LC_NUMERIC=C;LC_TIME=Russian_Russia.1251"
> Encoding(data$char_var[1]) <- "1251"
> data$char_var[1]
[1] "гревцев"
, и это то, что мы имеем на машине B
> data$char_var[1]
[1] "<e3><f0><e5><e2><f6><e5><e2>"
> Encoding(data$char_var[1])
[1] "UTF-8"
> Sys.getlocale()
[1] "LC_COLLATE=Russian_Russia.1251;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=Russian_Russia.1251;LC_NUMERIC=C;LC_TIME=Russian_Russia.1251"
> Encoding(data$char_var[1]) <- "1251"
> data$char_var[1]
[1] "фамилия"
Первый скрипт возвращает gibberi sh, но правильно печатает начальное значение. Тот же код, работающий на машине B, сначала печатает utf-8, а затем возвращает закодированные значения. В чем может быть причина такой разницы?
В результате мы хотим, чтобы скрипт, который имел бы такое же выходное значение "фамилия", отображал его на панели инструментов.