1.Shapefile字符截断问题

来源:互联网 发布:西门代练淘宝店网址 编辑:程序博客网 时间:2024/05/24 05:56

所遇问题

首先说一下我遇到的问题:我在用ArcCatalog将Excel工作表导出为Shapefile格式数据时,四个字的字段名只有三个字,即题目中所说的字符被截断了。
其所用的desktop版本为10.4.1,当时这个问题暂时被搁置了,后来10.5版本出来了,又导出了一遍还是遇到同样的问题,接下来我又用别人的电脑(版本为10.2)试了一下,额,还真别说,四个字的字段名导出来仍然为四个字,此后我便认为10.2以上的版本都有这个问题。之后和同学一起讨论完之后给Esri发了个邮件,那边给发了一篇博客(见文末,原因及解决方法均转自这篇博客,截图为博主自己亲测并截的图),才发现还有这么多道道。现在给大家详细说一下。

原因

这个问题仍然与编码类型有关。

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 个汉字了。

解决办法

方法一:
使用地理数据库,放弃shapefile,避免各种截断问题,这也是存储地理数据的康庄大道。(亲试有效,方法简便的多)
以下操作在ArcMap的【目录】窗口中进行的:
1.首先新建一个文件地理数据库:
这里写图片描述
2.右键Excel中的工作表并单击【创建要素类】→【从XY表】,打开【从XY表创建要素类】对话框。(图略)
3.参数设置略,保存选项设置如下图:
这里写图片描述
其实就是将其保存在地理数据库当中。
方法二:
①若是用的10.2.x(高于10.2)版本的点击:http://blog.csdn.net/kikitamoon/article/details/19116415。
②若是高于10.3(原博客,我用的10.5,也有效)的,继续往下看(修改注册表):
1. 在开始菜单(win7)或cortana(win10)中输入regedit,单击打开注册表编辑器,我用的win10见下图:
这里写图片描述
2. 定位到 ‘My Computer(计算机)\HKEY_CURRENT_USER\Software\ESRI\Desktop 10.x(下图为10.5)’
3. 创建项 ‘Common‘, 接着在其下创建 ‘CodePage’ 项, 添加 ‘字符串’,名称: dbfDefault,健值:oem(或者 936)。
这里写图片描述
这里写图片描述

修改前:

这里写图片描述
修改后:

这里写图片描述

总结

这样ArcGIS Desktop 读、写 shapefile的默认方式就将是Windows当前语言 OEM CodePage 936。除此之外,还可以解决shapefile在ArcGIS 中打开乱码的问题。

修改为936的依据:
OEM代码页标识符
437 - 美国
708 - 阿拉伯语(ASMO 708)
720 - 阿拉伯语(透明ASMO),阿拉伯语(DOS)
737 - 希腊语,希腊语(DOS)
775 - 波罗的语,波罗的语(DOS)
850 - 多语言拉丁语1, DOS)
852 - 拉丁语2,中欧(DOS)
855 - 西里尔文
857 - 土耳其语,土耳其语(DOS)
860 - 葡萄牙语,葡萄牙语(DOS)
861 - 冰岛语(DOS)
862 - 希伯来语,希伯来语(DOS)
863 - 法语加拿大,法语加拿大(DOS)
864 - 阿拉伯语,阿拉伯语(864)
865 - 北欧,北欧(DOS)
866 - 俄语,西里尔文(DOS)
869 - 现代希腊语,现代希腊语(DOS)
932 - 日语,日语)
936 - 中文(简体):中华人民共和国,新加坡
949 - 韩国(统一
通行证)950 - 繁体中文:台湾,香港,中华人民共和国
ALARABI - 将代码页设为448
参考Esri支持:http://support.esri.com/technical-article/000013192
原博客地址:http://blog.csdn.net/kikitamoon/article/details/50326415

原创粉丝点击