[已解决] shinyapps 的中文显示问题
yihui 这个蛋糕必须点赞。
yihui
您好,我写了一个shiny应用,是使用RODBC读MYSQL数据库,在本地Windows上运行都没有问题,不过放到服务器上会报错,错误是:
Warning: Error in gsub: input string 4 is invalid in this locale
我的服务器系统是:
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS release 6.8 (Final)
Matrix products: default
BLAS: /usr/lib64/R/lib/libRblas.so
LAPACK: /usr/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=zh_CN.utf8 LC_NUMERIC=C
[3] LC_TIME=zh_CN.utf8 LC_COLLATE=zh_CN.utf8
[5] LC_MONETARY=zh_CN.utf8 LC_MESSAGES=zh_CN.utf8
[7] LC_PAPER=zh_CN.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=zh_CN.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.1
我在我写的shinyAPP里加上您下面这段话,不过仍然是报错:
options(shiny.usecairo = FALSE)
font_home <- function(path = '') file.path('~', '.fonts', path)
if (Sys.info()[['sysname']] == 'Linux') {
dir.create(font_home())
file.copy('wqy-zenhei.ttc', font_home())
system2('fc-cache', paste('-f', font_home()))
}
期待您的答复~
ghoost2010 你的问题跟我的解决办法基本上毫无关系。我这段代码解决的是服务器上缺失中文字体的问题,而你的问题看起来像是字符编码问题。这问题可以简化为一句话:Windows 上有各种鸟语方言编码,就是不能原生支持 UTF-8,而 Linux 上通常用统一的 UTF-8,所以在 Windows 上能跑的字符处理程序到了 Linux 上未必能跑,反之亦然。你需要保证在两个平台上都用明确、正确的编码。至于具体问题在哪里,我不知道,你给的信息不够多,我也没时间。
yihui
首先,非常感谢您的回复。
其次,很喜欢您博客里的一些观点,比如有篇博文《职业羞耻感》。
对linux确实不熟悉,尝试过很多方法后,在这里看到您的答复所以做了次提问。如果可以称为您的粉丝的话,您可以欣慰您的粉丝并不是一个伸手党。
再次感谢您的回复,我会再尝试下其他方法。
- 已编辑
ghoost2010 请贴出更多的代码,尤其是出问题的代码。不确定的话,就全贴出来。不然没法诊断故障。此外,你这个问题可能不属于中文显示问题,所以不宜归到本条目下,最好写成一个新帖子。
根据我的 windows 经验,shinyapps 的代码里除了 label 参数外,是不能处理中文字符的,即使拷贝了中文字体也不行。得用别的方案,好在我找到了。所以,请贴出你的问题代码,说不定能有办法。
yihui 拜托你对我们这些粉丝温柔一点嘛。你看他的session明明显示的系统是 x86_64-redhat-linux-gnu。
ghoost2010 呃,我刚读了一遍我的回帖,再看了一下 @dapengde 的回帖,意识到我说话可能有点饭冰冰,抱歉。不过请相信我没有冰冰的意思,也没有说你没做足功课的意思。有时候娃突然嚎了,或者做饭来不及了,或急着出门,只能赶紧把冷酷到底的事实先敲出来。如果说我有吐槽什么的话,请相信我只是在吐槽 Windows,因为我在这个 Windows 坑里花费了太多太多时间,而且只能眼睁睁看人接二连三掉进去;若吐槽有伤及无辜,还请见谅。
根据你给的有限信息,我唯一能猜测的就是你的 MySQL 数据库不是 UTF-8 编码,剩下的我就爱莫能助了。
yihui
其实我说不是伸手党主要是怕你觉得伸手党太多,让你心冷,哈哈。我确实喜欢你的博文,不仅仅是技术,主要是你的一些思想。
问题已经解决了,虽然我不知道是因为什么。。从RODBC换成DBI+RMYSQL连接又好了。
dapengde
恩,抱歉我以为是相同的问题,现在已经没问题了。
- 已编辑
yihui 谢大神,您好!
我是一个shiny的初学者,前段时间编了个比较简陋的应用(https://shenliming.shinyapps.io/xuanke01/),勉强可用,没出什么大问题。后来我想在这个应用里面加入两个图,就用了ggplot2这个包(app.R中写了“library(ggplot2)”)。然后就出问题了(https://shenliming.shinyapps.io/xuanke02/)。
报错显示的是:
Error in value[[3L]](cond) : 不存在叫‘ggplot2’这个名字的程辑包
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
停止执行
后来搜到了这个帖子,我就把您的这段语句加入到了app.R文件的最前端:
font_home <- function(path = '') file.path('~', '.fonts', path)
if (Sys.info()[['sysname']] == 'Linux') {
dir.create(font_home())
file.copy('wqy-zenhei.ttc', font_home())
system2('fc-cache', paste('-f', font_home()))
}
而且也去文泉驿下载了字体,把字体文件(wqy-zenhei.ttc)放到了app.R所在的目录。但是我的报错依旧,而且还新增了一行:
Warning in dir.create(font_home()) : '/home/shiny/.fonts'已存在
这是日志文件的记录:
2017-11-30T06:12:06.471137+00:00 shinyapps[241541]: Server version: 1.5.10-6
2017-11-30T06:12:06.471167+00:00 shinyapps[241541]: LANG: zh_CN.UTF-8
2017-11-30T06:12:06.675266+00:00 shinyapps[241541]: Starting R with process ID: '36'
2017-11-30T06:12:06.471169+00:00 shinyapps[241541]: R version: 3.4.2
2017-11-30T06:12:06.698575+00:00 shinyapps[241541]: Warning in dir.create(font_home()) : '/home/shiny/.fonts'已存在
2017-11-30T06:12:06.471173+00:00 shinyapps[241541]: shiny version: 1.0.5
2017-11-30T06:12:06.471189+00:00 shinyapps[241541]: knitr version: NA
2017-11-30T06:12:06.471173+00:00 shinyapps[241541]: rmarkdown version: NA
2017-11-30T06:12:06.675262+00:00 shinyapps[241541]:
2017-11-30T06:12:06.471190+00:00 shinyapps[241541]: jsonlite version: 1.5
2017-11-30T06:12:06.588646+00:00 shinyapps[241541]: Using jsonlite for JSON processing
2017-11-30T06:12:06.471216+00:00 shinyapps[241541]: RJSONIO version: NA
2017-11-30T06:12:06.471217+00:00 shinyapps[241541]: htmltools version: 0.3.6
2017-11-30T06:12:09.567221+00:00 shinyapps[241541]: Error in value[[3L]](cond) : 不存在叫‘ggplot2’这个名字的程辑包
2017-11-30T06:12:09.567224+00:00 shinyapps[241541]: Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
2017-11-30T06:12:09.567225+00:00 shinyapps[241541]: 停止执行
我没有用过linux系统,应用里的中文也是必须的,不能去掉,所以特地来向您请教。非常期待您的回复!?