Кодировка символов, 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")

Мои "учения":

  1. Кодировки исходного файла, базы данных и потоков данных - это не одно и то же;
  2. Я потратил время, чтобы убедиться, что источники данных были созданы в правильной кодировке, игнорируя (неявное?) Преобразование потока данных;
  3. Эта страница помогла: 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, и вы можете изменить кодовую страницу на получение кодовой страницы, чтобы отразить это. Возможно, что где-то далеко назад происходит тихая трансформация, и это не указывает на это.

Другие вопросы по тегам