在 shiny-server 上提供 shiny 应用程序时的编码问题

encoding issue when serving shiny app on shiny-server

提问人:Tomasz Wojtas 提问时间:6/13/2023 最后编辑:Tomasz Wojtas 更新时间:6/20/2023 访问量:90

问:

我遇到这个问题已经有一段时间了。我正在通过不使用特殊字符来解决问题。然而,现在是解决它的时候了。

问题很简单:本地运行上完美工作的应用程序在移动到 /srv/shiny-server/ 时停止工作

精确地在波兰标志处对数点。下面是一个最小的工作示例:

library(shiny)
library(DT)
library(ggplot2)
df = data.frame(ę = rep(c("group1", "group2"), 50), ć = rnorm(n = 100))

ui <- fluidPage(

    # Application title
    titlePanel("Encoding example"),

    sidebarLayout(
        sidebarPanel(
            ""
        ),

        
        mainPanel(
          plotOutput("Plot")

        )
    )
)

server <- function(input, output) {

    output$Plot <- renderPlot({
      ggplot(df, aes(ę, ć)) +
        geom_boxplot()
        
    })
}

shinyApp(ui = ui, server = server)

以下是日志:

su: ignoring --preserve-environment, it's mutually exclusive with --login
Error in parse(file, keep.source = FALSE, srcfile = src, encoding = enc) :
  /srv/shiny-server/encoding_debugging/app.R:4:17: unexpected input
3: library(ggplot2)
4: df = data.frame(▒^y
                   ^
Error in sourceUTF8(fullpath, envir = new.env(parent = sharedEnv)) :
  Error sourcing /srv/shiny-server/encoding_debugging/app.R
Calls: runApp ... shinyAppDir -> shinyAppDir_appR -> appObj -> func -> sourceUTF8
Execution halted

系统设置:

> Sys.getenv('LANG')
[1] "en_US.UTF-8"
> Sys.getlocale()
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C"

它不允许在变量/列名中包含任何特殊字符。如何解决这个问题?

我在 Ubuntu 22.04 上最新的 shiny-server 上服务。所有软件包都是最新的。

有什么建议吗?

此致敬意 托马斯

r 编码 UTF-8 闪亮服务器

评论

1赞 MrFlick 6/13/2023
如果您包含一个简单的可重现示例,可用于测试和验证可能的解决方案,则更容易为您提供帮助。您是在同一台计算机上编写脚本还是在 Windows 计算机上编辑脚本?您使用的是哪个 R 版本?
0赞 divibisan 6/13/2023
你能分享一下你的吗?Sys.getenv('LANG')
0赞 JosefZ 6/13/2023
编辑您的问题,以提供一个最小的可重复示例。此外,分享您的...Sys.getlocale()
0赞 Tomasz Wojtas 6/13/2023
@MrFlick - 是的,我在同一台机器上写的。
0赞 Tomasz Wojtas 6/13/2023
@JosefZ - 我添加了最小的工作示例并添加了 Sys.getlocale()

答:

0赞 Tomasz Wojtas 6/20/2023 #1

最后我在这里找到了它:https://github.com/rocker-org/rocker-versioned2/issues/397#issuecomment-1090829840

解决方案非常简单 - 只需添加“LC_ALL=en_US。UTF-8“ 转换为 /etc/default/locale

sudo su
echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale

此致敬意!