【问题标题】:Reading shape file with sf::st_read fails to capture encoding UTF8使用 sf::st_read 读取形状文件无法捕获编码 UTF8
【发布时间】:2019-10-27 13:16:24
【问题描述】:

我想读取一个以UTF8 编码的形状文件。当我使用rgdal::readOGR 阅读它时它工作正常,但sf::st_read 无法获得正确的编码。有关如何解决此问题的任何建议?

对于一个可重现的示例,我正在尝试读取的形状文件可以下载here

阅读rgdal::readOGR

shp <- rgdal::readOGR(shp_file, encoding = "UTF-8")
head(shp@data)

>   ID CD_GEOCODM      NM_MUNICIP
> 0 53    1200013      ACRELÂNDIA
> 1 54    1200054    ASSIS BRASIL
> 2 55    1200104       BRASILÉIA
> 3 56    1200138          BUJARI
> 4 57    1200179        CAPIXABA
> 5 58    1200203 CRUZEIRO DO SUL

阅读sf::st_read

  sf <- sf::st_read(shp_file, stringsAsFactors=F, options = "ENCODING=UTF8")
  head(sf)


>   ID CD_GEOCODM      NM_MUNICIP                       geometry
> 1 53    1200013   ACREL<c2>NDIA POLYGON ((-67.14117 -9.6833...
> 2 54    1200054    ASSIS BRASIL POLYGON ((-69.79978 -10.506...
> 3 55    1200104    BRASIL<c9>IA POLYGON ((-69.58835 -10.643...
> 4 56    1200138          BUJARI POLYGON ((-68.31643 -9.2954...
> 5 57    1200179        CAPIXABA POLYGON ((-67.84667 -10.287...
> 6 58    1200203 CRUZEIRO DO SUL POLYGON ((-72.89221 -7.4995...


# I have also tried manually adding the encoding but it still doesn't work.

sf <- sf::st_read(shp_file, stringsAsFactors=F, options = "ENCODING=UTF8")
Encoding(sf$NM_MUNICIP) <- "UTF-8"
sf$NM_MUNICIP

> [1] "ACREL\xc2NDIA"        "ASSIS BRASIL"         "BRASIL\xc9IA"         "BUJARI"              
> [5] "CAPIXABA"             "CRUZEIRO DO SUL"      "EPITACIOL\xc2NDIA"    "FEIJ\xd3"            
> [9] "JORD\xc3O"            "M\xc2NCIO LIMA"       "MANOEL URBANO"        "MARECHAL THAUMATURGO"
> [13] "PL\xc1CIDO DE CASTRO" "PORTO WALTER"         "RIO BRANCO"           "RODRIGUES ALVES"     
> [17] "SANTA ROSA DO PURUS"  "SENADOR GUIOMARD"     "SENA MADUREIRA"       "TARAUAC\xc1"         
> [21] "XAPURI"               "PORTO ACRE"          


其他形状文件也会出现同样的问题,比如this other one,所以我认为这不是文件本身的问题。

【问题讨论】:

    标签: r encoding spatial shapefile sf


    【解决方案1】:

    当我尝试使用sf::st_read 使用编码为WINDOWS-1252 而不是UTF8 读取它时,它对我有用。希望对你有帮助!

    sf <- sf::st_read("ac_municipios/12MUE250GC_SIR.shp", options = "ENCODING=WINDOWS-1252")
    

    【讨论】:

    • 这对我也有用。您原来的 rgdal::readOGR 没有给我正确的编码(在 ubuntu 上,一个 UTF-8 平台 afaik)。我猜你工作的平台起了作用。
    • 谢谢你们。我注意到来自 IBGE(巴西统计局)的形状文件在不同年份使用不同的编码。
    • shapefile 上的编码可以是 PITA,如果您不在 ASCII 上。过去我使用stri_encode(shape$column, from = "UTF-8", to = "UTF-8") 只是为了强制执行UTF-8 行为。奇怪,但它起作用了......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2015-11-24
    • 2020-04-28
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多