最近在发布 shp 文件服务、读写 shp 文件时经常遇到了关于属性字段中有中文的问题。
一、cpg 文件
1、来源
在ArcGIS10.2 以前是没有这个文件的。
为什么增加了这个文件?
应该是由于 shp 格式加入了对等宽字符的支持,导致有段时间 shp 文件和 ArcGIS 对字符的支持存在不匹配。
ArcGIS 还专门出了对 ArcGIS10.2 的补丁,在官网可以下载到补丁文件。下载地址,搜索:Shapefile Default Code Page Patch 就可以找到补丁文件。
在 ArcGIS 10.2 以后,新建的 shp 文件都带了 .cpg 文件。
2、作用
该文件就是存储文件的编码。而且只存储这个,所以文件内容比较简单。
如下图,就是一个 cpg 文件的内容。
3、没有 cpg 文件
对于没有该文件的 shp 为了编码问题,可以自己创建。
文本输入对应编码(和文件编码保持一致),保存和 shp 同名文件,修改文件后缀为 .cpg 即可。
创建这个文件在 ArcGIS10.2 以后的软件都可以正常使用。
针对 GeoServer、QGIS 使用还有其他问题。
二、GeoServer 编码
虽然有 cpg 文件,GeoServer 是无法读取的,所以在 GeoServer 发布 shp 文件时,新建“数据存储”时要选择对应的编码,否则会乱码。
如下图所示:
三、QGIS 编码
QGIS 在有 cpg 文件的情况下是可以读取到对应的编码的。
当没有 cpg 文件时,QGIS 里面是可以手动选择编码方式,只要和文件的编码方式一致也能正确显示中文:
提示:
在遇到乱码问题时,使用文本打开 dbf 文件,如果中文能够正常显示说明文件编码是支持中文的。这时就要设置好当前查看软件编码。