繁体   English   中英

在 R 中使用 sf 包中的 st_read 时,如何从 Postgre 表中获得正确的编码

[英]How do I get correct encoding from my Postgre table when using st_read from the sf package in R

我想从我的 Postgre 数据库(默认编码 UTF8)中读取一个表,因为它实际上是一个 PostGIS 表,我将 st 包与 st_read 一起使用。

test_sf <- st_read(con, stringAsFactor = FALSE, layer = "test_df")

运行该命令会返回一条消息“type is 146”,我找不到代码的解释。 根据 ISO 没有几何类型的代码 146,但这是另一回事。

查看读入 test_sf 的数据,我可以看到字体编码出错了。 我有带有字母的字符串,例如“ø”等。特定的“ø”在 RStudio 中显示为“ø”。 试图解决我正在查看数据帧中特定列的编码:

Encoding(test_sf[["status"]])

但结果只显示了unknown 改变编码Encoding(test_sf[["status"]]) <- "latin1"确实为所有带有特殊字符的字符串显示了latin1的编码,但所有没有特殊字符的字符串都使用unknown的编码。 更糟糕的是, View(test_sf)仍然显示 'ø' 而不是 'ø'。

当我用 DBeaver 查看数据库表时,字体编码是正确的。 在Python中读取数据,字体编码是正确的。 因为我想在 Shiny 的图中显示数据,所以我想使用 R。

如何获得正确的数据字体编码?

我刚刚看到你的问题,因为我最近遇到了同样的问题。 所以我编写了这个函数,允许以您选择的编码转换字符列(因为在我的情况下这是不正确的列)。 就我而言,我使用 UTF-8,但您可以更改它。

readable = function(df){
  x = sapply(df, class)
  if (class(df)[1] == "sf") { #if it's a sf object
    lst = list()
    for (i in names(x)) {
      if (x[i] == "character") { #just works with the columns with the character type
        lst[[i]] = (df[i])[1][[1]]
        Encoding(lst[[i]]) = "UTF-8"
        df[i] = lst[[i]]
      }
    }
  }
  else{ #if it's a data.frame
    for (i in names(x)) {
      if (x[i] == "character") {
        Encoding(df[, i]) = "UTF-8"
      }
    }
  }
  return(df)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM