Кириллица читается из базы некорректно
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Кириллица читается из базы некорректно
Добрый день!
При чтении функцией read.dbf() из базы в формате dbf кириллический текст превращается в закорючки.
Возможно, это началось после установки R 4.0.0.
Пробовал варианты:
- вернулся к версии R 3.6.3
- Sys.setlocale("LC_CTYPE", "russian")
- Sys.setlocale(category = "LC_ALL", locale = "Russian")
- перезагрузка компьютера
Пока ни чего не помогает.
Подскажите, что надо сделать?
Спасибо!
При чтении функцией read.dbf() из базы в формате dbf кириллический текст превращается в закорючки.
Возможно, это началось после установки R 4.0.0.
Пробовал варианты:
- вернулся к версии R 3.6.3
- Sys.setlocale("LC_CTYPE", "russian")
- Sys.setlocale(category = "LC_ALL", locale = "Russian")
- перезагрузка компьютера
Пока ни чего не помогает.
Подскажите, что надо сделать?
Спасибо!
Последний раз редактировалось VistaSV30 22 июн 2020, 17:09, всего редактировалось 1 раз.
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Кириллица читается из базы некорректно
dbf - это не база, это просто таблица. Перевести в текстовый вид, и спокойно читать read.table() с прямым указанием кодировки.
P.S. Если есть склонность к мазохизму, то почитать тут, в частности как правильно писать параметры локали (см. выхлоп Sys.setlocale())
P.S. Если есть склонность к мазохизму, то почитать тут, в частности как правильно писать параметры локали (см. выхлоп Sys.setlocale())
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
Это фрагмент моего DBF (кодировка 886 Russian MS-DOS)
https://yadi.sk/d/WgFFqJP6tHmK0Q
Это мой код
Какие параметры должны быть у функции read.table() ?
https://yadi.sk/d/WgFFqJP6tHmK0Q
Это мой код
Код: Выделить всё
library(foreign)
df <- read.dbf("Data/D1.DBF")
df1 <- read.table("Data/D1.DBF", header = T)
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Кириллица читается из базы некорректно
VistaSV30, послушайте мудрого gamm'а ! Конвертируйте Ваши dbf'ы в ASCII через что-либо: "родной"- soft, где Ваши dbf-ы делались, через DBF Commаnder, через Excel и т.д. и т.п.gamm писал(а): ↑22 июн 2020, 16:28Перевести в текстовый вид, и спокойно читать read.table() с прямым указанием кодировки.
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
Хотелось сделать скрипт R, чтоб пользователь только указал имя файла DBF, а всё остальное, чтоб сделал R.
В самом R есть средства исправления кодировки?
В самом R есть средства исправления кодировки?
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
-
- Интересующийся
- Сообщения: 25
- Зарегистрирован: 07 фев 2012, 12:00
- Репутация: 20
Re: Кириллица читается из базы некорректно
Код: Выделить всё
# stopifnot(packageVersion("sf")>="0.9-4")
Sys.setlocale("LC_CTYPE","Russian")
writeLines("866","D1.CPG")
a <- sf::st_read("D1.DBF")
Encoding(a$F149) <- "UTF-8"
a
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Кириллица читается из базы некорректно
... по кодировке dbf-файла на форуме есть ещё ответ уважаемого gamm'а:
https://gis-lab.info/forum/viewtopic.php?t=19471
https://gis-lab.info/forum/viewtopic.php?t=19471
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
Заработало!
Только добавил для текста преобразование as.character(), то он загружается в R как Factor
На реальных данных тоже работает!
Спасибо!
Только добавил для текста преобразование as.character(), то он загружается в R как Factor
Код: Выделить всё
Sys.setlocale("LC_CTYPE","Russian")
writeLines("866","D1.CPG")
a <- sf::st_read("c:/R/D1.DBF")
a$F149 <- as.character(a$F149)
Encoding(a$F149) <- "UTF-8"
a
Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
Родным софтом DBF Commаnder и MS Access исправить ситуацию не получалось.
Сама проблема то возникла после установки новой версии R 4.0.0. До этого пока работал на R 3.6.3 всё было хорошо
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Кириллица читается из базы некорректно
можно при чтении сразу так:VistaSV30 писал(а): ↑23 июн 2020, 08:33a <- sf::st_read("c:/R/D1.DBF")
Код: Выделить всё
a <- sf::st_read(fileDBF, stringsAsFactors = FALSE)
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Кириллица читается из базы некорректно
nplatonov, спасибо ! -
Попробовал также и получается.
только, видимо, что не в 4, а в 3.6, - так stringsAsFactors = FALSE пришлось добавить:
Попробовал также и получается.
только, видимо, что не в 4, а в 3.6, - так stringsAsFactors = FALSE пришлось добавить:
Код: Выделить всё
a <- sf::st_read(fileDBF, stringsAsFactors = FALSE)
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
У меня почему-то в R 4.0.0 и R 4.0.2 возникают проблемы с определением путей к пакетам. Тут вот кодировка стала сбиваться.
И как обычно, нужно срочно заканчивать работу, нет возможности разбираться с ручными настройками.
R 3.6.3 пока меня не подводит - буду работать на нем.
И как обычно, нужно срочно заканчивать работу, нет возможности разбираться с ручными настройками.
R 3.6.3 пока меня не подводит - буду работать на нем.
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
- VistaSV30
- Активный участник
- Сообщения: 185
- Зарегистрирован: 02 июл 2018, 15:05
- Репутация: 7
- Откуда: Балашиха
Re: Кириллица читается из базы некорректно
Файл dbf создан в программе написанной лет 20 тому назад еще под DOS
https://yadi.sk/d/ZoXbcA1iIqp1Ew
Подскажите, как корректно загрузить его в R?
Кажется уже испробовал всё, что Вы мне советовали.
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane
-
- Интересующийся
- Сообщения: 25
- Зарегистрирован: 07 фев 2012, 12:00
- Репутация: 20
Re: Кириллица читается из базы некорректно
Код: Выделить всё
options(stringsAsFactors=FALSE)
Sys.setlocale("LC_CTYPE","Russian")
writeLines("866","f111.cpg")
a <- sf::st_read("f111.dbf")
Encoding(a$TEXT) <- "UTF-8"
a
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Кириллица читается из базы некорректно
VistaSV30, выше же nplatonov прекрасный рецепт дал!
Вероятно, засиделись за полночь и не очень внимательны были
особенно к строчке
- ведь в ней, так понимаю, надо прописать вы-parse'-нный корень имени файла...
Даю ниже для Вашего крайнего файла:
Пока, готовил своё к отправке nplatonov уже ответил Вам.
Вероятно, засиделись за полночь и не очень внимательны были
особенно к строчке
Код: Выделить всё
writeLines("866",,,,)
- ведь в ней, так понимаю, надо прописать вы-parse'-нный корень имени файла...
Даю ниже для Вашего крайнего файла:
Код: Выделить всё
Sys.setlocale("LC_CTYPE","Russian")
fileDBF <- "f111.dbf"
file_extension <- tools::file_ext(fileDBF)
CPGfileDBF <- gsub(file_extension, "CPG", fileDBF)
writeLines("866", CPGfileDBF)
df <- sf::st_read(fileDBF, stringsAsFactors = FALSE)
colnames(df)
Encoding(df$TEXT) <- "UTF-8"
str(df)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей