我已经阅读了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"
再次为缺乏示例而道歉,这只是一个从数据库中拉出来的问题。我怀疑我在某个地方的某些消毒功能上错过了一面旗帜,但需要一些帮助才能找到正确的方向。
答案 0 :(得分:1)
在code page 1252 Windows Latin 1中Upper 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;:
我的理解有点浅薄,但是 - 坦率地说 - 我现在还没有深入挖掘字符编码的世界。我希望它可以帮助别人避免错误!