R中德语变音符号(Umlauts)显示异常及多数据源合并问题求助
解决R中readOGR读取含德语变音符号数据的编码异常问题
我太懂你这种头疼了——合并带德语变音符号的数据源时,readOGR读出来的名称变成L\303\266rrach这种乱码,而且同一名称在不同文件里格式还不统一,完全没法正常合并匹配。下面是几个我亲测有效的解决方案,你可以挨个试试:
1. 事后修正数据列的编码
如果已经读入了数据,先手动把字符列的编码转成UTF-8(德语变音符号最常用的标准编码):
# 方法1:直接指定原编码为latin1(欧洲文件常用编码) map@data$name <- iconv(map@data$name, from = "latin1", to = "UTF-8") # 方法2:自动检测编码再转换(更稳妥) library(stringi) detected_enc <- stri_enc_detect(map@data$name)[[1]]$Encoding[1] map@data$name <- stri_encode(map@data$name, from = detected_enc, to = "UTF-8")
转换后你再查看map@data$name,应该就能看到正常的Lörrach了。
2. 读取时直接指定编码
新版本的rgdal包(readOGR属于这个包)支持读取时直接设置编码参数,从根源上避免乱码:
# 优先试试UTF-8编码 map <- readOGR("/path/to/data.gdb", layer = "layer", encoding = "UTF-8") # 如果UTF-8不行,换成latin1试试 map <- readOGR("/path/to/data.gdb", layer = "layer", encoding = "latin1")
这样读出来的字符列编码直接是对的,不用再额外处理。
3. 统一所有数据源的编码格式
你提到同一名称在不同文件里呈现不同,核心原因是不同数据源用了不同编码。所以要把所有文件都转成统一的UTF-8:
- 对于CSV这类非空间文件,读取时指定编码:
df <- read.csv("/path/to/other_data.csv", fileEncoding = "latin1", stringsAsFactors = FALSE) df$name <- iconv(df$name, from = "latin1", to = "UTF-8")
统一编码后,不管是用merge还是dplyr::left_join匹配名称,都不会因为编码差异导致匹配失败了。
4. 验证编码是否正确
处理完后可以用下面的命令确认编码是否已经变成UTF-8:
Encoding(map@data$name)
如果输出结果是"UTF-8",就说明没问题啦。
内容的提问来源于stack exchange,提问作者ke.re
相关产品推荐
相关产品推荐

