【问题】:
在10.2.1、10.3版本读取10.2及之前版本ArcGIS创建的Shapefile,属性表中的汉字会出现乱码,该如何解决?
【原因】:
这个问题的根本原因就是读取文件使用的编码类型和文件实际存储的编码类型不一致。
【解决方法】:
ArcGIS 10.2.1之前版本,Shapefile根据Locale进行编码,可以直接按照dbfDefault设置方法到注册表中修改。
设置方法请参考:http://zhihu.esrichina.com.cn/article/79
ArcGIS 10.2.1及之后版本,Shapefile采用的是utf-8编码,在shapefile子文件旁边创建个记事本,修改为同名的CPG文件,文本内容oem或者936。
设置方法请参考:http://zhihu.esrichina.com.cn/article/32
【注意】:
ArcGIS Desktop 10.2.1 和 10.2.2 版本下修改编码行为,需要先打补丁,然后再按照dbfDefault设置方法到注册表中修改。
10.2.1补丁包:
http://support.esri.com/en/downloads/patches-servicepacks/view/productid/160/metaid/2090
10.2.2补丁包:
http://support.esri.com/en/downloads/patches-servicepacks/view/productid/67/metaid/2089
【备注】:
- ArcGIS会先读取DBF头文件LDID中的编码,然后是CPG文件,最后是CodePage。
- 如果不知道Shapefile的编码类型,可以使用程序检测(http://zhihu.esrichina.com.cn/article/32),通过ID,查询编码表中的编码进行对应。如果ID没有在编码表中,那么无法确定Shapefile使用的是什么编码,只能靠猜,猜对概率不大。
【扩展阅读】:
浅谈文字编码和Unicode
http://www.fmddlmyy.cn/text16.html
http://www.fmddlmyy.cn/text17.html
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
http://www.fmddlmyy.cn/text6.html
谈谈Windows程序中的字符编码
http://www.fmddlmyy.cn/text7.html