转载:https://blog.csdn.net/qingjianduoyun/article/details/72935395
所遇问题
首先说一下遇到的问题:我在用ArcCatalog10.6将原始Shapefile(四个中文字段名)导出为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 中打开乱码的问题。
网友评论