HTML部分的中文显示正常,但图形中的中文全是方框。原以为是自己的设置有问题,发现谢博士的演示文章的中文图表标题也一样是方框了:麻麻再也不用担心我的Shiny应用不能显示中文了
什么情况?恢复shiny到旧版本也不行,是R升级的问题?
HTML部分的中文显示正常,但图形中的中文全是方框。原以为是自己的设置有问题,发现谢博士的演示文章的中文图表标题也一样是方框了:麻麻再也不用担心我的Shiny应用不能显示中文了
什么情况?恢复shiny到旧版本也不行,是R升级的问题?
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 8 (jessie)
locale:
[1] LC_CTYPE=zh_CN.UTF-8 LC_NUMERIC=C
[3] LC_TIME=zh_CN.UTF-8 LC_COLLATE=zh_CN.UTF-8
[5] LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES=zh_CN.UTF-8
[7] LC_PAPER=zh_CN.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.2.2
options(shiny.usecairo = FALSE)
就正常了。 :-)shinyapps 的中文显示问题,我一直没解决,所以能躲就躲,现在躲不过去了,提出来想请教一下@yihui 和大家。
首先,我遇到的问题只在 shinyapps 的服务器端出现。在本地电脑上运行我自己写的 shinyapps 是没有问题的,中文显示很正常。而发布到服务器端后,一访问就立刻 disconnected。
为了测试,我下载了官方的 rstudio/shiny-examples,在本地运行也没有任何问题,但发布到服务器后,就显示错误:
An error has occurred
The application failed to start.
我查了一下后台的log:
sh: 1: locate: not found
Error in value[[3L]](cond) : 不存在叫‘curl’这个名字的程辑包
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
停止执行
奇怪了。是不是因为缺少 library(curl)
指令?
于是我就把这条指令添加到 server.R 里,然后把服务器端已经发布的这个测试项目给删掉了,重新发布。然而现在连发布都发布不了 了:
Preparing to deploy application...Error: HTTP 404
GET https://api.shinyapps.io/v1/applications/210229
Not Found
Execution halted
不知大家遇到过这种情况吗?哪位有别的成功发布的中文 shinyapps 来秀一下吗?
RStudio Version 1.0.153
> devtools::session_info()
Session info ----------------------------------------------------------
setting value
version R version 3.4.1 (2017-06-30)
system x86_64, mingw32
ui RStudio (1.0.153)
language (EN)
collate Chinese (Simplified)_People's Republic of China.936
tz Europe/Berlin
date 2017-09-02
Packages --------------------------------------------------------------
package * version date source
base * 3.4.1 2017-06-30 local
bitops 1.0-6 2013-08-17 CRAN (R 3.3.2)
compiler 3.4.1 2017-06-30 local
curl * 2.8.1 2017-07-21 CRAN (R 3.4.1)
datasets * 3.4.1 2017-06-30 local
devtools 1.13.3 2017-08-02 CRAN (R 3.4.1)
digest 0.6.12 2017-01-27 CRAN (R 3.3.2)
graphics * 3.4.1 2017-06-30 local
grDevices * 3.4.1 2017-06-30 local
htmltools 0.3.6 2017-04-28 CRAN (R 3.3.3)
httpuv 1.3.5 2017-07-04 CRAN (R 3.4.1)
jsonlite 1.5 2017-06-01 CRAN (R 3.3.3)
memoise 1.1.0 2017-04-21 CRAN (R 3.3.3)
methods * 3.4.1 2017-06-30 local
mime 0.5 2016-07-07 CRAN (R 3.3.2)
R6 2.2.2 2017-06-17 CRAN (R 3.3.3)
Rcpp 0.12.12 2017-07-15 CRAN (R 3.4.1)
RCurl 1.95-4.8 2016-03-01 CRAN (R 3.3.2)
RJSONIO 1.3-0 2014-07-28 CRAN (R 3.4.1)
rsconnect 0.8.5 2017-08-23 CRAN (R 3.4.1)
shiny * 1.0.5 2017-08-23 CRAN (R 3.4.1)
stats * 3.4.1 2017-06-30 local
tools 3.4.1 2017-06-30 local
utils * 3.4.1 2017-06-30 local
withr 2.0.0 2017-07-28 CRAN (R 3.4.1)
xtable 1.8-2 2016-02-05 CRAN (R 3.3.2)
dapengde 这坑一言难尽。核心问题是字体,还有跨平台问题(你用的是 Windows),需要你对 Linux 下的字体配置稍有了解。最简单的办法大概是你直接把字体 wqy-zenhei.ttc
绑在你的应用中一起发布,去掉 global.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()))
}
dapengde 别人可能碰到就放弃治疗了,只有你提了出来。这种细枝末节的问题偏偏牵涉到的工具链又死长,在广阔的码农界,R 是冷门语言、Shiny 是 R 部落的一小部分、Linux 是冷门(桌面)系统、中文用户是少数、开源中文字体数量跟英文字体数量比起来就是恒河里的一粒沙(从这一点看,我们确实要向文泉驿和 Adobe 的思源宋体团队致敬)。所以你求求交集看,世上还有多少人可能有这个闲工夫来把这条冷僻的路走通。就算你把这些东西都搞通了,最后的问题是 ShinyApps.io 是基于 Docker 的 Linux 虚拟机,你没有管理员权限,如何把字体装上也是个问题,所以还得知道 ~/.fonts
文件夹以及 fc-cache
命令。
现在你应该大概能理解 Linux 的 25 岁生日蛋糕为什么长那样了。
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 编码,剩下的我就爱莫能助了。