You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用terra导入Shapefile时保留重音字符?

问题:保留Shapefile中英法双语名称的重音字符

我需要导入包含英法双语省/地区名称的Shapefile,这些名称带有重音字符,但当前导入后重音被替换为特殊符号。

尝试过以下terra包导入代码,均报错:

  • statdat_fsa <- terra::vect("C:/Users/me/Desktop/lfsa000b21a_e.shp", layer_options = "UTF-8")
  • statdat_fsa <- terra::vect("C:/Users/me/Desktop/lfsa000b21a_e.shp", encoding = "UTF-8")

报错信息:Error in .local(x, ...) : unused argument (layer_options = "UTF-8")

将数据转成sf格式查看属性表:
fsa_sf <- sf::st_as_sf(statdat_fsa)
仍然发现PRNAME字段的重音字符被异常替换,请问如何解决?


解决方案

1. 使用sf包直接导入并指定编码

terra::vect()不支持通过encoding或layer_options设置字符编码,改用sf::st_read(),它支持通过options参数指定编码:

# 尝试UTF-8编码
fsa_sf <- sf::st_read("C:/Users/me/Desktop/lfsa000b21a_e.shp", options = "ENCODING=UTF-8")

# 如果UTF-8无效,试试加拿大统计局常用的ISO-8859-1(Latin-1)编码
fsa_sf <- sf::st_read("C:/Users/me/Desktop/lfsa000b21a_e.shp", options = "ENCODING=ISO-8859-1")

2. 导入后手动转换编码

如果已经用terra完成导入,可在转成sf格式后,手动转换目标字段的编码:

fsa_sf <- sf::st_as_sf(statdat_fsa)
# 假设原编码为ISO-8859-1,转换为UTF-8
fsa_sf$PRNAME <- iconv(fsa_sf$PRNAME, from = "ISO-8859-1", to = "UTF-8")

3. 确认DBF文件的实际编码

Shapefile的属性数据存储在同名的DBF文件中,可通过DBF查看工具确认其实际编码,加拿大统计局的这类文件通常采用ISO-8859-1或Windows-1252编码,对应设置导入参数即可。


内容的提问来源于stack exchange,提问作者m0ssyb00ts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:55:04