在 Shiny 中编码

Posted

技术标签:

【中文标题】在 Shiny 中编码【英文标题】:Encoding in Shiny 【发布时间】:2014-08-11 23:44:32 【问题描述】:

我正在使用 RStudio 版本 0.98.507。关于初始工作工具的简短信息:

R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252   
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.1252    

other attached packages:
[1] shinyapps_0.3.53 RJSONIO_1.2-0.2  shiny_0.9.1.9013

loaded via a namespace (and not attached):
 [1] bitops_1.0-6    Cairo_1.5-5     caTools_1.17    digest_0.6.4   
 [5] htmltools_0.2.4 httpuv_1.3.0    Rcpp_0.11.1     RCurl_1.95-4.1 
 [9] shinysky_0.1.2  tools_3.1.0     xtable_1.7-3   

我在闪亮的服务器上部署闪亮的应用程序时遇到了问题。问题在某个时候得到了解决,但在它再次出现之后。现在我不能再修复它了。我的问题是 helpers.R 中的德语字母。不幸的是,我无法避免使用它们。我正在将我的帮助脚本 helpers.R 采购到 server.R 中,就像在 Shiny Tutorial 中显示和教授的那样。 我所有的 R 脚本都小心地保存在 UTF-8 格式下。我无法使用命令

options(encoding="UTF-8")

因为执行后,命令 deployApp("app") 不起作用。我使用

设置位置
Sys.setlocale(category = "LC_ALL", locale = "German")

它也不起作用。 我不明白,为什么 mainPanelsidebarLayout 中的字母是可读的,而 helpers.R 中的字母却不是。有人可以帮我解决这个悖论吗?

示例

ui.R

library(shiny)

shinyUI(fluidPage(withMathJax(),
                  titlePanel("Währung"),

                  sidebarLayout(position="right",
                                sidebarPanel(
                                        h5("Bedienfenster"),
                                        sliderInput('x', 'x axis',
                                                    value=50, min=3, max=150, step=1,)
                                ),

                                mainPanel(
                                        plotOutput("Plot")
                                )
                  )
))  

server.R

shinyServer(function(input, output)
        output$Plot <- renderPlot(
               x <- rnorm(input$x)
               hist(x, main="", xlab="", ylab="")
               title(main="Schätzgerade", xlab="Währung", ylab="Dichte")
        )
)

部署后我会关注app。

【问题讨论】:

您是否尝试在source() 命令中设置encoding= 参数? 当然和opitions(encoding="UTF-8")效果一样 那么,您对问题的描述似乎不足以使其可重现给其他人。这将使进一步帮助您变得非常困难。你能整理一个其他人可以运行以体验相同行为的最小工作示例吗? 这很可能是 ShinyApps.io 的回归错误,我们已经意识到了这一点。请继续关注修复:) 我在 Linux 中工作并修复了一些更改我的语言环境参数的编码问题,$sudo update-locale LANGUAGE=es_ES:es(在我的例子中,我使用西班牙语口音)。如果您使用的是 Linux,请使用 $locale 检查您当前的语言环境参数并试一试。 【参考方案1】:

作为一种解决方法(我尚未测试),您是否尝试过使用转义的 Unicode 字符,例如 "W\u00E4hrung" 而不是 "Währung"?您可以使用?Quotes 找到有关如何执行此操作的详细信息,http://en.wikipedia.org/wiki/List_of_Unicode_characters 有一个 Unicode 字符列表。

【讨论】:

【参考方案2】:

对我有用的是更改文件的编码(在 Rstudio File>Reopen with encoding 中)并设置编码:

用于 ui.R 的 UTF-8 用于 server.R 和 global.R 的 WINDOWS-1252

我不知道原因,但这对我来说是个窍门。

【讨论】:

当闪亮的 0.10.1 发布时这将不起作用(希望在几天后)。这些 R 脚本必须以 UTF-8 编码。【参考方案3】:

Shiny 0.10.1 已在 CRAN 上发布,所以只需 install.packages('shiny')。请忽略下面的答案。


直到最近我们才真正开始研究 Windows 下的 Unicode 问题。现在问题应该解决了,您可以尝试从这里安装最新的开发版本:

devtools::install_github('rstudio/shiny')

我们计划在即将发布的闪亮 0.10.1 中发布它,因此如果您能帮助我们测试它,我们将不胜感激。基本上,您需要做的就是确保 ui.R 和 server.R 以 UTF-8 编码。您不需要将options(encoding = 'UTF-8') 或将ä 转义为\u00E4

【讨论】:

以上是关于在 Shiny 中编码的主要内容,如果未能解决你的问题,请参考以下文章

使用 R Shiny 中的 sliderInput 动态渲染等值线图

R Shiny、Leaflet 的问题 --> SelectInput 以更改下拉菜单中的选择

如何使用 R 中的 timevis 更改时间轴中每个组的背景颜色

根据无功输出值设置最大滑块输入值

身份验证令牌、本地存储和流星

Linux中如何查看文件编码及对文件进行编码转换