R包文本编码 - 特殊字符编码不正确

时间:2015-03-25 13:51:24

标签: r

我在这些方面都有一个R函数:

swedish.weekday <- function(date = Sys.Date()) {
  require(lubridate)
  c("Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör")[wday(date)]
}

这将返回相当于Sun,Mon,Tue等的三个字母。

完全正常工作,直到我将这个函数包含在一个包中,在这个包中,函数转换为:

swedish.weekday <- function(date = Sys.Date()) {
  require(lubridate)
  c("Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör")[wday(date)]
}

我尝试将项目设置中的编码选项设置为ISO8859-1或WINDOWS-1252,但都不起作用。在Windows 7下使用64位R 3.1.2。

怀疑我需要在构建配置中更改某些内容,但我对于什么感到迷失 - 任何帮助/方向都非常感激!

1 个答案:

答案 0 :(得分:1)

根据上面评论中发布的链接,我通过仅使用Unicode转义解决了这个问题:

day <- c("S\u00F6n", "M\u00E5n", "Tis", "Ons", "Tor", "Fre", "L\u00F6r")[wday(date)]

编辑:在将这些结果传递给外部系统(OLAP)时,我发现有必要强制将这些结果编码为ISO(“latin-9”),以确保它不仅在屏幕上看起来正确就系统而言day <- inconv(day, "UTF-8", "latin-9")

也是如此

对于参考......

  

有一种可移植的方法可以在R代码中的字符串中使用任意文本(仅限),以Unicode格式提供它们作为\ uxxxx转义符。如果当前编码中没有任何字符,则解析器会将字符串编码为UTF-8并将其标记为。这也适用于数据集中的字符串:它们可以使用\ uxxxx转义编写或在UTF-8中以UTF-8语言环境编码,或甚至通过'iconv()'转换为UTF-8。如果这样做,请确保在DESCRIPTION文件的“取决于”字段中有“R(&gt; = 2.10)”(或更高版本)。