在R中保存Unicode字符

时间:2018-06-20 08:54:01

标签: r unicode utf-8

我有从dataURI(plotly.js)获取的svg文件,并将该数据发送到服务器(发光的应用程序):

    exportImage(plot, settings.config).then(function(dataURI) {
      var payload;
      if (!settings.dataURI) {
        var data = dataURI.replace(/data:image\/svg\+xml,/, '');
        // I'm using decodeURIComponent in browser because it's much faster.
        payload = decodeURIComponent(data);
        $('<div>' + payload + '</div>').appendTo('body');
      } else {
        payload = dataURI;
      }
      Shiny.onInputChange(settings.messageId, payload);
    });

svg包含单位为mm³的unicode字符,而在observeEvent中,svg包含正确的字符,当我在RStudio中使用browser()暂停时,得到了以下信息:

> substring(input$svg, 198036, 198061)
[1] "Volume (mm³) on log2 scale"

但是当我将其保存到文件中时,我已经使用了mm3

writeLines(
  paste('<?xml version="1.0" encoding="utf-8"?>', input$svg),
  svg.file
)

我尝试使用enc2utf8函数并将useBytes设置为TRUE,还尝试在JavaScript中添加<?xml并使用cat(svg, svg.file),它会产生无效编码的字符或3而不是³。

我有这个:

> Encoding(input$svg)
[1] "UTF-8"
> Sys.getlocale()
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"

这应该是UT8吗?如何将utf8字符保存到R中的文件中?

我正在Windows上对其进行测试,但是它将部署到Linux计算机上。

1 个答案:

答案 0 :(得分:1)

因此,似乎问题出在编码上,在这种情况下,如果我将编码更改为UTF-16,则可以正确打印该值。

所以在这种情况下:

Encoding(input$svg) <- "UTF-16"

上面的方法效果很好,并且可以打印正确的输出

#[1] "Volume (mm³) on log2 scale"

enter image description here