r - Shiny 应用程序中的 Unicode 文本

标签 r unicode shiny

我正在尝试制作包含表情符号的 Shiny 打印文本输出。不幸的是,它似乎不是打印表情符号,而是打印不同符号的 Unicode 数字,如下所示:

enter image description here

这是 Shiny 不处理表情符号的简单示例。它从 emoji.json 加载三个表情符号文件:

{"emoji":["😅","😒","😫"]}

并简单地呈现 app.R 中的文本
library(jsonlite)
library(shiny)
library(tidyverse)
ui <- fluidPage(textOutput("emoji"))
server <- function(input, output) {
   output[["emoji"]] <- renderText({
     "emoji.json" %>% 
     read_json() %>% 
     .[["emoji"]] %>% 
     str_c(collapse="")
   })
}
shinyApp(ui = ui, server = server)

感觉我必须在某处做一些转变,但我不知道是什么。这也是在使用 R 版本 3.5.0 的 Windows 10 计算机上完成的。谢谢!

最佳答案

我认为这取决于您的 emoji.json 的编码文件。当我将您的示例文件复制到 TextEdit(我在 Mac 上)时,将其转换为纯文本,并将其保存为 .jsonUTF-8编码,表情符号在 TextEdit 和您发布的 Shiny 应用程序中都能正确显示。

我认为问题可能是由于编码,所以我用它们的十六进制等效替换了表情符号,并用 Western (Windows Latin 1) 保存了文件。编码,因此它们显示为十六进制数字的纯文本。

让它们在 Shiny 中正确显示只需要结合 as.integer从十六进制和 intToUtf8 转换将它们呈现为 UTF8人物。

JSON 文件,带有 Western (Windows Latin 1) 中表情符号的十六进制表示编码:

{"emoji":["0x0001F605","0x0001F612","0x0001F62B"]}

Shiny 的应用程序:

library(jsonlite)
library(shiny)
library(tidyverse)
ui <- fluidPage(textOutput("emoji"))
server <- function(input, output) {
    output[["emoji"]] <- renderText({
        "emoji3.json" %>% 
            read_json() %>% 
            .[["emoji"]] %>% 
            sapply(function(x) {
                intToUtf8(as.integer(x))
            }) 
    })
}
shinyApp(ui = ui, server = server)

表情符号正确显示:

The Emoji are properly displayed

关于r - Shiny 应用程序中的 Unicode 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675459/

相关文章:

r - 为什么 Shiny.onInputChange 在 R shiny 中有不稳定的行为?

图中数据点的 R 箭头标记

r - 使用 ggplot 同时重叠折线图和条形图

r - R中相同的种子,不同的操作系统,不同的随机数

mysql - 如何查询MySQL中包含空字符的字段

r - 如何让 R Shiny downloadHandler 文件名起作用?

r - 为每个图例标签显示两个符号

unicode - 列出其中包含 Unicode 符号的目录名称无法正常工作

php - 可以使用MySQL函数实现语言检测吗?

javascript - RStudio Shiny 和 JavaScript 通信问题