免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 20295|回复: 27
收起左侧

[经验共享] 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下

  [复制链接]

88

主题

3345

铜板

3

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
735
发表于 2017-11-9 16:43 | 显示全部楼层 |阅读模式
为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?低版本中不是至少可以存储4个汉字吗?
原因
这个问题仍然与编码类型有关。
ArcGIS 10.2 以及更早的版本,ArcGIS写shapefile的时候,遇到中文默认使用Windows当前语言 字符集编码(也称 代码页/CodePage/OEM CodePage),例如中文一般使用的是 CodePage 936(GBK)。
ArcGIS 10.2.1 以及之后的版本,ArcGIS写shapefile的时候,默认使用的是 UTF-8 编码类型。
这两种编码类型存储汉字所使用的字节数是不相同的,上面的关键字中我也给出了 wiki 的链接,有兴趣点进去看看详情。简言之,shapefile自身的限制是字段为9个字节,CP936编码下汉字通常为双字节存储,因此可以存储 9/2=4 个汉字;UTF-8 编码下汉字至少需要3个字节存储,因此最多只能存储 9/3=3 个汉字了。



为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字

为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字


举个例子,在Python命令行中,我们求一下 Unicode字符串的长度就可以真相大白。

为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字

为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字


解决方法
Perfect Solution:
使用地理数据库,放弃shapefile,避免各种截断问题,这也是存储地理数据的康庄大道。
但是,shapefile的拥趸说“我的需求是恢复以前存储4个汉字的shapefile,我不想用地理数据库,我希望得到老版本的shapefile的结果,我不在乎shapefile的编码类型是什么 ……bla bla……”好吧,方法还是有的。
Workaround:
这里还有个注意事项: 如果你用的刚好是 10.2.1 和10.2.2 这两个版本,那么要打补丁后以下设置才生效。以前写过另外一篇,详情点 这里。 如果你用的是 10.3.x ,那么直接向下进行。

1.打开注册表,定位到 ‘My Computer\HKEY_CURRENT_USER\Software\ESRI\Desktop 10.x’<li>创建项 ‘Common‘, 接着在其下创建 ‘CodePage’ 项, 添加 ‘字符串’,名称: dbfDefault,健值:oem(或者 936)。

为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字

为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字



这样ArcGIS Desktop 读、写 shapefile的默认方式就将是Windows当前语言 OEM CodePage 936。
PS: 当然这种方法,也可以解决第一个问题,并且不需要为缺失oem编码信息的数据增加cpg文件了。两种方法,任君选择。

评分

参与人数 1威望 +20 铜板 +10 收起 理由
棕熊号航母 + 20 + 10 感谢分享!

查看全部评分

0

主题

52

铜板

0

好友

实习生

Rank: 1

积分
3
发表于 2018-4-12 10:46 | 显示全部楼层
斗胆问一下10.2.2的补丁链接在哪里?
回复 支持 1 反对 0

使用道具 举报

38

主题

2万

铜板

49

好友

地信专家组

Rank: 14Rank: 14Rank: 14Rank: 14

积分
2479

精华勋章爱心勋章组织勋章灌水勋章荣誉会员勋章活跃勋章地信专家组VIP勋章贡献勋章冰雪节勋章成就学员勋章12周年纪念勋章

发表于 2017-11-9 18:55 手机频道 | 显示全部楼层
感谢大神指点,
回复 支持 反对

使用道具 举报

0

主题

485

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
23
发表于 2018-2-3 15:04 | 显示全部楼层
写的很好,谢谢!
回复 支持 反对

使用道具 举报

5

主题

164

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
43
QQ
发表于 2018-2-8 11:40 | 显示全部楼层
我的10.4,用了这个方法还是没有解决,楼主有没有新的办法,谢谢
回复 支持 反对

使用道具 举报

0

主题

212

铜板

1

好友

实习生

Rank: 1

积分
3
发表于 2018-11-10 11:10 | 显示全部楼层
yan717fang 发表于 2018-4-12 10:46
斗胆问一下10.2.2的补丁链接在哪里?

我也同问,真的有点急,是不是解决10.2.2的一个乱码补丁?
回复 支持 反对

使用道具 举报

0

主题

331

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
36
发表于 2018-12-1 16:27 | 显示全部楼层
请问10.2.2打个什么补丁
回复 支持 反对

使用道具 举报

0

主题

1623

铜板

4

好友

助理工程师

Rank: 5Rank: 5

积分
211
发表于 2018-12-4 10:05 | 显示全部楼层
谢谢分享
回复

使用道具 举报

2

主题

332

铜板

5

好友

助理工程师

Rank: 5Rank: 5

积分
105
发表于 2019-3-28 21:21 | 显示全部楼层
楼主不给补丁链接的做法是不可取的,链接在此:链接:https://pan.baidu.com/s/1cxNBF_5tTorz7pprmuJHMw  提取码:59y4  
回复 支持 反对

使用道具 举报

7

主题

3733

铜板

4

好友

VIP会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
264
发表于 2019-3-29 16:50 | 显示全部楼层
dbf一个字段名11个字节
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表