字符编码,带数据库的dplyr(postgresql)

时间:2016-08-10 11:56:06

标签: database encoding shiny dplyr r-dbi

我已经阅读了Shiny编码问题的线程和包更新,但我有一个(难以重现的例子)数据库驱动的Shiny应用程序,它正在摸索一些特殊字符。

在我的postgresql数据库中,我正确地看到了我的瑞典河,“UpperUmeälvenRiver”,当我用dplyr将其过滤回Shiny界面时: names.rivers <- filter(tbl.rivers, Country == "Sweden") ......在R中成为“UpperUmeälvenRiver”

我在本地使用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 个答案:

答案 0 :(得分:1)

code page 1252 Windows Latin 1Upper Umeälven River中'ä'的渲染是代码点0xE4(二进制11100100)。

同一代码页中的Upper Umeälven River有两个八位字节0xC3A4(XXX00011 XX100100)。

但是,如果考虑代码点的UTF-8 encoding rules,则有效位完全相同。

某处发生了无意或错误的字符编码,将字符转换为UTF-8,但仍认为该字符串具有Windows Latin 1代码页。

可能已经在UTF-8 中收到了数据,您可以将代码页更改为接收代码页以反映这一点。可能会在某个地方发生无声的转变,而且没有任何迹象表明这一点。

答案 1 :(得分:1)

如怀疑的那样,答案很简单: iconv(vector.to.convert, "UTF-8")

我的学习&#34;:

  1. 源文件,数据库和数据流的编码不是一回事;
  2. 我花时间确保数据源是以正确的编码创建的,忽略了数据流的(隐式?)转换;
  3. 此页面有帮助:http://shiny.rstudio.com/articles/unicode.html
  4. 我的理解有点浅薄,但是 - 坦率地说 - 我现在还没有深入挖掘字符编码的世界。我希望它可以帮助别人避免错误!