You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Shiny Server部署Shiny应用时遇到编码问题求助

问题概述

本地运行正常的Shiny应用,部署到Ubuntu 22.04系统的Shiny Server(/srv/shiny-server/路径)后无法启动,日志明确指向波兰语特殊字符(ę、ć)解析错误。系统环境已配置为UTF-8,但问题仍存在。

复现代码

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"
解决方案

方法1:确保代码文件以UTF-8无BOM格式保存并声明编码

  • 本地保存app.R时,选择UTF-8无BOM编码(RStudio操作:File -> Save with Encoding -> UTF-8)
  • 在代码第一行添加编码声明,强制R以UTF-8解析文件:
# -*- coding: utf-8 -*-
library(shiny)
# 后续代码...

方法2:重命名列名为ASCII字符,可视化时显示原特殊字符

彻底避开变量名中的特殊字符,同时保留前端显示的波兰语字符:

library(shiny)
library(DT)
library(ggplot2)
# 用ASCII字符命名列
df = data.frame(e_pl = rep(c("group1", "group2"), 50), c_pl = rnorm(n = 100))

ui <- fluidPage(
    titlePanel("Encoding example"),
    sidebarLayout(
        sidebarPanel(""),
        mainPanel(plotOutput("Plot"))
    )
)

server <- function(input, output) {
    output$Plot <- renderPlot({
      ggplot(df, aes(e_pl, c_pl)) +
        geom_boxplot() +
        # 坐标轴显示原波兰语字符
        labs(x = "ę", y = "ć")
    })
}

shinyApp(ui = ui, server = server)

方法3:配置Shiny Server强制使用UTF-8编码

  • 编辑Shiny Server配置文件(路径:/etc/shiny-server/shiny-server.conf),在server块中添加环境变量:
server {
  env LANG=en_US.UTF-8;
  # 原有配置内容...
}
  • 重启Shiny Server生效:
sudo systemctl restart shiny-server

内容的提问来源于stack exchange,提问作者Tomasz Wojtas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:42:42