Shiny: проблема с кодировкой / спецсимволами при запуске приложения через batch-файл - PullRequest
0 голосов
/ 09 мая 2019

Я пишу небольшой пакетный скрипт для запуска приложения shinydashboard, чтобы люди, не знакомые с R, могли легко получить доступ к приложению.Пока все работает, за исключением того, что специальные символы (а именно, ä, ö и ü) не отображаются правильно, когда я запускаю приложение через пакетный скрипт.Все R-файлы сохраняются в кодировке UTF-8.Может быть, в .bat-файле есть опция, которую мне не хватает?Я уже добавил команду Sys.setlocale () - в R-файл, но это не решило проблему.Я создал небольшой пример для иллюстрации проблемы:


apptest.R

library(shiny)

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

# Define UI ----
ui <- fluidPage(
  titlePanel("title panel with ä"),

  sidebarLayout(
    sidebarPanel("sidebar panel with ü"),
    mainPanel("main panel with ö")
  )
)

# Define server logic ----
server <- function(input, output) {

}

# Run the app ----
shinyApp(ui = ui, server = server, options = list(port = 7924))

runAppTest.bat

start "" "C:\Program Files\R\R-3.5.1\bin\Rscript.exe" apptest.R
SLEEP 5
start "" http://127.0.0.1:7924

вам может потребоваться настроить C: \ Program Files \ R \ R-3.5.1 \ bin \ Rscript.exe для вашей версии или просто поместить туда Rscript.exe, еслиВы добавили его в PATH.

Если вы запустите приложение через R-Studio, вы увидите, что буквы отображаются правильно.Если вы делаете это через .bat-файл, он выглядит так:

enter image description here

Это похоже на проблему кодирования для меня, но у меня нетсмог решить это.Кто-нибудь может мне помочь в этом вопросе?спасибо!

1 Ответ

1 голос
/ 09 мая 2019

Я мог бы предложить обходной путь, который я использовал, когда у меня была похожая проблема.

Используйте файл-оболочку для обеспечения кодировки (здесь: callAppEncoded.R).

Сценарий будет выглядеть так:

CMD / .bat -> callAppEncoded.R source("<PATHTO>/app.R", encoding = "UTF-8") -> app.R

Воспроизводимый пример (проверено):

CMD / .bat

Rscript.exe  <PATHTO>/callAppEncoded.R

callAppEncoded.R

source("<PATHTO>/app.R", encoding = "UTF-8", echo = TRUE)

Редактировать: в соответствии с предложением OP, добавив echo = TRUE. Для меня это было необязательно, для ОП требовалось.

app.R

library(shiny)

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

ui <- fluidPage(
  titlePanel("title panel with ä"),

  sidebarLayout(
    sidebarPanel("sidebar panel with ü"),
    mainPanel("main panel with ö")
  )
)

server <- function(input, output) {}

runApp(
  shinyApp(ui = ui, server = server, options = list(port = 7924))  
)
...