Кодировка символов, dplyr с базой данных (postgresql)
Я читал темы и обновления пакетов для проблем кодирования с Shiny, но у меня есть (пример, который трудно воспроизвести) приложение Shiny, управляемое базой данных, которое возится с некоторыми специальными символами.
В моей базе данных postgresql я правильно вижу свою шведскую реку, "Upper Umeälven River", которая - когда я фильтрую ее обратно в интерфейс Shiny с помощью dplyr:names.rivers <- filter(tbl.rivers, Country == "Sweden")
... становится "Верхней рекой Умельвен" в Р.
Я использую кодировку UTF-8 локально; Я думаю, что я теряю что-то из-за обмена с базой данных.
Sys.getlocale()
[1] "LC_COLLATE=French_France.1252;LC_CTYPE=French_France.1252;LC_MONETARY=French_France.1252;LC_NUMERIC=C;LC_TIME=French_France.1252"
Снова извиняюсь за отсутствие примера, это ТОЛЬКО проблема, извлекаемая из базы данных. Я подозреваю, что где-то пропущен флажок в какой-либо функции очистки, но мне нужна помощь, чтобы указать правильное направление.
2 ответа
Как и предполагалось, ответ был прост:iconv(vector.to.convert, "UTF-8")
Мои "учения":
- Кодировки исходного файла, базы данных и потоков данных - это не одно и то же;
- Я потратил время, чтобы убедиться, что источники данных были созданы в правильной кодировке, игнорируя (неявное?) Преобразование потока данных;
- Эта страница помогла: http://shiny.rstudio.com/articles/unicode.html
Мое понимание немного поверхностно, но, честно говоря, я сейчас не буду углубляться в мир кодирования символов. Я надеюсь, что это помогает кому-то еще избежать ошибки!
В вашей кодовой странице 1252 Windows Latin 1 рендеринг для "ä" в Upper Umeälven River
находится в кодовой точке 0xE4 (двоичный код 11100100).
Upper Umeälven River
в той же кодовой странице есть два октета 0xC3A4 (XXX00011 XX100100).
Однако, если учесть правила кодирования UTF-8 кодовой точки, значимые биты в точности совпадают.
Где-то происходит непреднамеренное или ошибочное кодирование символов, которое переносит символ в UTF-8, но все же считает, что строка имеет кодовую страницу Windows Latin 1.
Возможно, данные уже поступают в UTF-8, и вы можете изменить кодовую страницу на получение кодовой страницы, чтобы отразить это. Возможно, что где-то далеко назад происходит тихая трансформация, и это не указывает на это.