如何在使用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
相关产品推荐
相关产品推荐

