最近在發布 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 文件,如果中文能夠正常顯示說明文件編碼是支持中文的。這時就要設置好當前查看軟件編碼。