我正在尝试制作包含表情符号的 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 计算机上完成的。谢谢!
最佳答案
我认为这取决于您的 emoji.json
的编码文件。当我将您的示例文件复制到 TextEdit(我在 Mac 上)时,将其转换为纯文本,并将其保存为 .json
与 UTF-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)
表情符号正确显示:
关于r - Shiny 应用程序中的 Unicode 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675459/