• R语言
  • centos7下安装shiny-server 程序中用read.dbf读取dbf文件,因为编码问题报错。

程序在Windows下,用rstudio运行,读取dbf数据文件中的数据,用ggplot2画图,正常运行,没有问题。
后准备移植到centos中的shiny-server中。
但是在centOS7下,安装shiny-server,在局域网的其他电脑上输入http://<ip地址>:3838/sample-apps运行系统自带的示例程序运行正常,只有移植过来的这个程序,报错如下:
error:输入的多字节字符串1有错。
用rstudio直接运行,也是报同样的错误。
经检查,应该是dbf文件代码的问题。在windows下,读取gbk代码的文件没问题。centos下读取出错。
在发这个帖子之前,在google搜索了很多方法,均不能解决。
甚至尝试用iconv对文件进行代码转换(gbk>utf8),发现转换后完全不能读取,报读取错误。
centos系统中,用locale查看字符集,gbk和UTF-8也都有。
搜索了众多资料,终于找到本网站。
在此,提出疑问,怎么样在不对数据库编码变更的情况下,在centOS的shiny-server上运行?
此部分代码如下:

library(foreign)#导入read.dbf的函数库 read.dbf在此库中
library(ggplot2)#导入ggplot2函数库
server <- function(input, output) {
  output$plot <- renderPlot({
  #以下代码导入数据库文件并转换时间轴和数据轴格式
  tsyp_batch<-read.dbf("e://jilu.dbf")

在 <https://stat.ethz.ch/R-manual/R-devel/library/foreign/html/read.dbf.html> 这个页面里查询,获得的信息太少。
不知道描述的是不是清楚。

    starsnowfire 先要搞清楚出错是在哪一步出的错,是读文件,还是读完文件的后续操作。如果是后者,那还有解决的希望;如果是前者,估计就够呛了,只能找个工具把 dbf 转换为其它 R 支持以特定字符编码读取的格式(read.dbf 不支持指定编码)。

    @ghoost2010 你看又是一个 Windows 的鸟语方言问题……世人要花多长时间在这种坑爹的问题上。

      yihui
      在rstudo下,运行
      tsyp_batch<-read.dbf("e://jilu.dbf")
      这一行代码,Windows里获得的表中,能正常显示中文。centos中运行上述语句,Windows中显示中文的位置,显示的是类似于<ea><bd>的字符。

      yihui
      恩,我觉得你这里描述查找问题缘由的思路很好。之前我写也有碰到一些问题,和技术人员闲聊(他其实不用R),就告诉我把每一步打印出来看哪里出错【虽然写函数的时候会这样解决问题,不过有时候还是会遗忘这个思路】。非技术人员在查找bug上确实还需要经验积累。
      至于Windows的问题,只能尽量保持编码一致了。我这样的小白也是在这样被教育中不断成长。?