我正在尝试输出包含表情符号的Shiny打印文本。不幸的是,它似乎没有打印表情符号,而是打印了不同符号的Unicode数字,如下所示:
这是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计算机上完成的。谢谢!
答案 0 :(得分:0)
我认为这取决于您的emoji.json
文件的编码。当我将示例文件复制到TextEdit(在Mac上)时,将其转换为纯文本,并以.json
编码保存为UTF-8
,表情符号在TextEdit和您发布的闪亮应用。
我虽然问题可能是由于编码所致,所以我用与其对应的十六进制替换了表情符号,并用Western (Windows Latin 1)
编码保存了文件,使它们显示为十六进制数字的纯文本。
要使它们正确显示在Shiny中,只需要结合as.integer
从十六进制转换和intToUtf8
使其变为UTF8
字符即可。
带有Western (Windows Latin 1)
编码的表情符号十六进制表示形式的JSON文件:
{"emoji":["0x0001F605","0x0001F612","0x0001F62B"]}
闪亮的应用程序:
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)
表情符号正确显示: