使用SUNGEO包调用Nominatum时地址UTF-8编码异常求助
解决SUNGEO地理编码后地址字段的UTF-8乱码问题
问题根源
你遇到的乱码是典型的UTF-8编码文本被错误以Latin-1(ISO-8859-1)解码导致的。比如示例中的Lövmovägen实际应为Lövmovägen——UTF-8的ö(字节0xC3 0xB6)被当作Latin-1解码就会显示为ö,ä同理。
解决方法
不要直接修改编码属性,需先将乱码文本还原为原始字节,再用UTF-8重新解码:
方法1:通过raw字节转换
# 将乱码文本转为raw字节(基于当前错误的Latin-1编码) raw_bytes <- charToRaw(as.character(data_geocode_full_test$address)) # 用UTF-8重新解码字节 data_geocode_full_test$address <- rawToChar(raw_bytes, encoding = "UTF-8")
方法2:用iconv一步完成(更简洁)
data_geocode_full_test$address <- iconv(data_geocode_full_test$address, from = "latin1", to = "UTF-8")
验证方法
执行后可通过以下代码确认修复效果:
# 查看地址字段的编码属性 Encoding(data_geocode_full_test$address) # 打印前几条地址检查内容 head(data_geocode_full_test$address)
预防建议
若后续批量处理仍出现类似问题,可提前配置HTTP请求的编码头(SUNGEO底层依赖httr):
library(httr) # 设置全局HTTP请求接受UTF-8编码 httr::set_config(httr::add_headers(Accept = "application/json; charset=utf-8"))
内容的提问来源于stack exchange,提问作者m45ha
相关产品推荐
相关产品推荐

