使用readOGR时如何编码德语umlauts

14

我试图使用rgdal包提供的readOGR函数读取OGR矢量地图,但是在处理德语umlauts时遇到了一些麻烦。下面是数据示例,像ö这样的umlauts被替换为\303\266

map <-readOGR("/path/to/data.gdb", layer = "layer")
map@data$name
# [1] L\303\266rrach
# [2] Karlsruhe
# [3] B\303\266blingen
# [4] ...

我已经尝试在readOGR函数中指定编码(readOGR(dsn = "/path/to/data.gdb", layer = "layer", encoding = "UTF-8"readOGR(dsn = "/path/to/data.gdb", layer = "layer", encoding = "LATIN-1"),但它似乎完全忽略了编码参数,因为我尝试的每个编码都得到了相同的结果。有人知道如何让readOGR函数或R显示正确的德语umlauts吗?


你在使用Windows电脑吗? - user3710546
我正在Debian 8服务器上运行RStudio Server。 - user2275786
非常奇怪。我正在使用utf8编码读取geojson / shp文件,但在R中显示的内容混乱不堪。如果我通过使用utf8编码的csv文件读取相同的数据(两者都是从QGIS导出的),一切都很好。有人递给我一把枪吧。 - Roman Luštrik
3个回答

14

朱利安是正确的。

file_name <- "../gis_data/bw/AX_KommunalesGebiet.shp"
shape_kommunal <- readOGR(file_name, layer = "AX_KommunalesGebiet", use_iconv = TRUE, encoding = "UTF-8")
data_kommunal <- shape_kommunal@data
head(data_kommunal)

返回正确的字符串:

  GKZ                NAME
0 08236074           Kämpfelbach
1 08425052           Grundsheim
2 08435067           Deggenhausertal

6
如果iconv未设置为TRUE,则编码参数将被忽略。

0

我不太确定encoding = "UTF-8/LATIN-1/..."可能会做什么。我原本以为你会选择一个编码方案而不是多个。在我的机器上,我确实看到将八进制字符转换为o-umlaut的转换:

> 'B\303\266blingen'
[1] "Böblingen"
> 'L\303\266rrach'
[1] "Lörrach"

要查看R字符的各种约定,请键入:

?Quotes

除了编码之外,还需要使用字体中的字符。您控制台显示中使用的字体似乎没有正确的o-umlaut映射。我的默认字体是Courier。您还应该检查您的区域设置。?Sys.getlocale

我想表明在读取OGR矢量地图时我使用了不同的编码方式。我曾经使用UTF-8、LATIN-1等多种编码方式进行过一次读取。至于你的回答,那有点奇怪,因为我得到了不同的结果。 'B\303\266blingen' # "B\303\266blingen" - user2275786
那就是问题所在。Sys.getlocale() 给出的信息是当前使用的是 "C",我用 Sys.setlocale() 将其更改为支持 UTF-8 的语言环境,现在 'L\303\266rrach' 正确显示为 "Lörrach"。 - user2275786

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接