首页 > 解决方案 > 闪亮的 renderTable 省略了 unicode 特殊字符

问题描述

我在一个闪亮的应用程序中有一个表,其中包含 Unicode 特殊字符。但是它们在 tableOutput 中被省略了,根本没有显示出来。

library(shiny)


ui <- fluidPage(
      tableOutput("table")
)

server <- function(input, output,session) {

    output$table = renderTable({

      mtcars[2,2]="◨"
      mtcars[1:3,1:3]
    }

    ,sanitize.text.function = identity)

}

shinyApp(ui = ui, server = server)

在此处输入图像描述

santitze.text.function似乎没有任何区别。我相信这是 print.xtable 的一个选项 - 无论如何 print.xtable 可以在控制台中很好地再现字符。如果我使用 renderDataTable 和 dataTableOutput,字符会显示得很好(作为实际的 Unicode 字符)。那么为什么它们不与 renderTable 和 tableOutput 一起出现呢?

标签: rshiny

解决方案


这适用于 html 实体:

  output$table = renderTable({

    mtcars[2,2]="&#9704;"
    mtcars[1:3,1:3]
  }

  , sanitize.text.function = identity)

如果不想在网上搜索html代码,可以这样获取:

sprintf("&#%d;", utf8ToInt("◨"))

最后,您可以按如下方式进行自动化。定义一个“消毒剂”功能:

f <- function(x){
  xs <- strsplit(as.character(x), "")[[1]]
  paste0(sprintf("&#%d;", sapply(xs, utf8ToInt)), collapse="")
}

然后使用它renderTable

  output$table = renderTable({

    mtcars[2,2]="◨"
    mtcars[1:3,1:3]
  }

  , sanitize.text.function = function(x) sapply(x, f) )

推荐阅读