(十)Shapefile编码(上)

判断shp文件编码

首先来讲下shp文件组成,一个shp文件通常由:shp、dbf、shx、prj四个文件组成,其中prj代表空间参考信息,shx存储了索引信息,有助于程序加快搜索效率,shp保存了元素的几何实体,最后dbf里面存放了每个几何形状的属性数据,所以我们将shp文件编码,实际上是讲dbf文件编码,因为只有dbf来说,才有可能存储GBK编码的中文或其他编码的其他语言的。

对于ArcGIS来说,用ArcGIS做的数据默认都是GBK编码的,因为我们的windows默认是gbk编码,也有一些情况下可能是utf8编码的。

dbf文件的第30个字节代表了编码类型(不是绝对的,不过我试了很多软件,大部分还是遵循这个标准的),所以我们只需要读取dbf的第30个字节,然后根据一个dbf编码表就能得到这个shp的编码了。

代码很简单:

package cn.dev;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Learn09 {
    public static void main(String[] args) throws Exception {
        InputStream dbf = Learn09.class.getResourceAsStream("/point/point.dbf");
        byte[] bytes = new byte[30];
        dbf.read(bytes);
        byte b = bytes[29];
        System.out.println(Integer.toHexString(Byte.toUnsignedInt(b)));
    }
}

对于这个shp来说,输出结果是

4d

我们从下表中找到4d,可以看到他对应的是gbk编码。

ID Codepage Description
1 0x01 437 US MS-DOS
2 0x02 850 International MS-DOS
3 0x03 1252 Windows ANSI Latin I
4 0x04 10000 Standard Macintosh
8 0x08 865 Danish OEM
9 0x09 437 Dutch OEM
10 0x0A 850 Dutch OEM*
11 0x0B 437 Finnish OEM
13 0x0D 437 French OEM
14 0x0E 850 French OEM*
15 0x0F 437 German OEM
16 0x10 850 German OEM*
17 0x11 437 Italian OEM
18 0x12 850 Italian OEM*
19 0x13 932 Japanese Shift-JIS
20 0x14 850 Spanish OEM*
21 0x15 437 Swedish OEM
22 0x16 850 Swedish OEM*
23 0x17 865 Norwegian OEM
24 0x18 437 Spanish OEM
25 0x19 437 English OEM (Great Britain)
26 0x1A 850 English OEM (Great Britain)*
27 0x1B 437 English OEM (US)
28 0x1C 863 French OEM (Canada)
29 0x1D 850 French OEM*
31 0x1F 852 Czech OEM
34 0x22 852 Hungarian OEM
35 0x23 852 Polish OEM
36 0x24 860 Portuguese OEM
37 0x25 850 Portuguese OEM*
38 0x26 866 Russian OEM
55 0x37 850 English OEM (US)*
64 0x40 852 Romanian OEM
77 0x4D 936 Chinese GBK (PRC)
78 0x4E 949 Korean (ANSI/OEM)
79 0x4F 950 Chinese Big5 (Taiwan)
80 0x50 874 Thai (ANSI/OEM)
87 0x57 Current ANSI CP ANSI
88 0x58 1252 Western European ANSI
89 0x59 1252 Spanish ANSI
100 0x64 852 Eastern European MS-DOS
101 0x65 866 Russian MS-DOS
102 0x66 865 Nordic MS-DOS
103 0x67 861 Icelandic MS-DOS
104 0x68 895 Kamenicky (Czech) MS-DOS
105 0x69 620 Mazovia (Polish) MS-DOS
106 0x6A 737 Greek MS-DOS (437G)
107 0x6B 857 Turkish MS-DOS
108 0x6C 863 French-Canadian MS-DOS
120 0x78 950 Taiwan Big 5
121 0x79 949 Hangul (Wansung)
122 0x7A 936 PRC GBK
123 0x7B 932 Japanese Shift-JIS
124 0x7C 874 Thai Windows/MS–DOS
134 0x86 737 Greek OEM
135 0x87 852 Slovenian OEM
136 0x88 857 Turkish OEM
150 0x96 10007 Russian Macintosh
151 0x97 10029 Eastern European Macintosh
152 0x98 10006 Greek Macintosh
200 0xC8 1250 Eastern European Windows
201 0xC9 1251 Russian Windows
202 0xCA 1254 Turkish Windows
203 0xCB 1253 Greek Windows
204 0xCC 1257 Baltic Windows

本节代码可以在https://github.com/scially/GeosparkBook找到(Learn09.java)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容