arcgis中编码方式改变引起的shp文件乱码、字符截断问题处理

我们有时候使用ArcGIS读取shp文件的时候,打开属性表后,属性值存在中文乱码的情况,或字段项存在长度缩减的情况,这都是使用不同版本的arcgis读取数据时编码方式不同造成的。

我们事先需要知道的是,数据在传输、存储、显示的时候,都是需要一定的字符编码方式支持的,如:ANSI、GB2312、Big5、UTF-8等等,如果软件在操作数据时,前后使用的编码方式不一样(也有可能字符编码信息丢了),那么就会出现乱码。

字符编码介绍参考:https://blog.csdn.net/lijie45655/article/details/81188104

字符编码代码表:https://wenku.baidu.com/view/79435a50a8114431b90dd89f.html

OEM:Original Equipment Manufacturer(原始设备产商),该词用在计算机中,表示早期IBM与微软为了支持不同国家、不同语言的字符编码而写入BIOS的固化字符编码,也就是OEM字符集编码。OEM字符集编码将不同语言的字符集分别用一个数字表示,并将这些数字编辑成页,叫做字符编码页code page 。字符编码页用于将当前字符转换识别出来,并在图形操作系统上显示。它包含437, 708, 720, 737, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 950等字符编码表,其中,437为美国IBM编码转换代码,708、720为阿拉伯数字编码转换代码,737希腊字母转换代码,860为葡萄牙语转换代码,874为泰语转换代码,932为日语转换代码, 936为简体中文转换代码,950为繁体中文转换代码,65001用于表示UTF-8转换代码。

对于操作系统或者软件而言,一般都会有字符编码转换功能,或者使用宿主机操作系统的编码页转换功能,您或许也见到过很多软件在设置路径的时候,需要设置为英文路径,这是因为该软件本就不支持中文编码。

一、shp乱码问题

对于Shapefile而言:

在Shapefile头文件(dBase Header)中,一般会包含字符编码信息,这个信息称为 LDID ( Language Driver ID)。在使用arcgis 打开Shapefile时,会读取LDID 存储的字符编码信息,再打开 shapefile。

在Shapefile子文件中,有时我们还会发现同名 *.CPG 文件,该文件中也存储了字符编码信息,用记事本打开该文件,可以看到 UTF-8或者OEM字样。

二者被ArcGIS 识别的优先顺序是:LDID 优先于 CPG文件。也就是说,如果在Shapefile头文件中没有约定字符编码方式时,那么ArcGIS会使用.CPG设置的字符编码方式打开shapefile。

如果shapefile文件缺失 LDID 或者.CPG 文件,那么编码类型就会使用OEM编码类型,也就是操作系统默认编码类型(操作系统默认编码是个很神奇的编码,变数很多,比如:ANSI、mul-Language多国语言版还有不同操作系统、同一操作系统不同编码类型的区别)。换句话说,此时操作系统使用什么样的编码方式,那么Shapefile也会使用相同的编码方式。如果Shapefile使用的编码方式与操作系统默认编码方式不一致,那么就会出现乱码。

一般而言, shapefiles 和 dBASE 文件都会存储字符编码信息, 但有些程序 OEM 文件没有包含字符编码页信息(例如: Microsoft Access 2000 and Excel 2000),程序会给没有编码页信息的文件设置为操作系统默认OEM 编码,字符就会出现乱码。

在 ArcGIS Desktop (ArcMap, ArcCatalog, and ArcToolbox) 中,利用编码页转换功能可以读写多种字符编码的 shapefile 和 dBASE 表。在系统注册表中,编码页转换功能命名为 'dbfDefault',可以修改这个值。

dbfDefault

在注册表中设置 ‘dbfDefault’ ,可以决定导出的 shapefile 和 dBASE 的编码类型。例如,把 ‘dbfDefault’ 设置为 OEM ,那么用 ArcMap, ArcCatalog, ArcToolbox 生成出来的 shapefile 和 dBASE 文件就是以 OEM编码的,设置成 ANSI ,那 shapefile 和 dBASE 文件就是 ANSI 编码的。

读 shapefile 和 dBASE 文件的逻辑与写是相同的,如果缺失编码信息,ArcGIS 读取文件的编码类型由 dbfDefault决定。

我们知道 shapefile 是个开放格式,只要你了解了数据规范,完全可以脱离ArcGIS自己生产出来。在Windows中文语言设置下,假设你自己写代码或者使用第三方的程序生产了shapefile,例如MapGIS,默认使用 CP936(GBK)编码存储,但是无论粗心大意还是有意为之没有在数据头文件中约定“我用了936!”。如果是 ArcGIS 10.2 和之前的版本,那么没问题,ArcGIS 默认就是以这种方式识别,没有乱码。可是拿到 ArcGIS 10.2.1 ,ArcGIS 10.2.2,ArcGIS 10.3.x 这几个版本中发现乱!码!了!在缺失 LDID 和 CPG时,这几个版本默认使用 UTF-8 来读取 shapefile,这样必然乱码

解决方法

在shapefile子文件旁边创建个记事本,修改为同名的CPG文件,文本内容oem、936或者UTF-8。

再次打开,没有乱码。

假定你的shapefile编码方式是UTF-8的,而LDID 和 CPG编码信息有是丢失的,那么还是按照上面的步骤,创建一个同名的CPG文件,写入UTF-8,保存。

二、字符截断问题

ArcGIS 10.2 以及更早的版本,ArcGIS写shapefile的时候,遇到中文默认使用Windows当前语言 字符集编码(也称 代码页/CodePage/OEM CodePage),例如中文一般使用的是 CodePage 936(GBK)

ArcGIS 10.2.1 以及之后的版本,ArcGIS写shapefile的时候,默认使用的是 UTF-8 编码类型。

这两种编码类型存储汉字所使用的字节数是不相同的。其中,shapefile自身的限制是字段为9个字节,CP936编码下汉字通常为双字节存储,因此可以存储 9/2=4 个汉字;UTF-8 编码下汉字至少需要3个字节存储,因此最多只能存储 9/3=3 个汉字了。

解决方法

使用地理数据库,放弃shapefile,避免各种截断问题,这也是存储地理数据的康庄大道。

但是,shapefile的拥趸说“我的需求是恢复以前存储4个汉字的shapefile,我不想用地理数据库,我希望得到老版本的shapefile的结果,我不在乎shapefile的编码类型是什么 ……bla bla……”好吧,方法还是有的。

Workaround

这里还有个注意事项:
如果你用的刚好是 10.2.1 和10.2.2 这两个版本,那么要打补丁后以下设置才生效。以前写过另外一篇,详情点 这里
如果你用的是 10.3.x ,那么直接向下进行。

  1. 打开注册表,定位到 ‘My Computer\HKEY_CURRENT_USER\Software\ESRI\Desktop 10.x
  2. 创建项 ‘Common‘, 接着在其下创建 ‘CodePage‘ 项, 添加 ‘字符串’,名称: dbfDefault,健值:oem(或者 936)

这样ArcGIS Desktop 读、写 shapefile的默认方式就将是Windows当前语言 OEM CodePage 936

当然这种方法,也可以解决第一个问题,并且不需要为缺失oem编码信息的数据增加cpg文件了。两种方法,任君选择。

‘dbfDefault’ 设置方法

  1. 开始 – 运行,输入”Regedit“,打开 注册表

  2. 如是用的是 10.x 版本 ArcGIS Desktop,定位到 My Computer\HKEY_CURRENT_USER\Software\ESRI\Desktop 10.x. 如果是9.3.1之前的版本,定位到 'My Computer\HKEY_CURRENT_USER\Software\ESRI'

  3. 创建项 Common, 接着在其下创建 CodePage 项, 添加 字符串 ,名称: dbfDefault ,健值: oem (或者936

以下dbfDefault支持的字符编码值:

OEM Code Page Values:

OEM, 437, 708, 720, 737, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 950

ANSI Code Page Values:

ANSI, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, Big5, SJIS

ISO Code Page Values:

ISO, 88591, 88592, 88593, 88594, 88595, 88596, 88597, 88598, 88599, 885910, 885913, 885915, EUC

Unicode Values:

UTF-8

附件一:shape文件说明

Shapefile 是一种开放的非拓扑的简单几何数据类型,深受数据处理人员的喜爱。 Shapefile 利用 dBASE 文件格式(.dbf 文件)来存储属性,dBase这种上世纪80年代的数据格式,现在基本淡出舞台。 虽然Shapefile有万般好,但是,今天还是要来说说shapefile的局限性,也就是使用限制有什么,以便合理的选择使用Shapefile数据。

1. 文件容量限制:

Shapefile 每个子文件都有大小最大不能超过 2 GB ,以点要素为例,最多约能存储 7000 万个。

2. 不支持高级对象:

Shapefile不支持注记要素类、关系类、拓扑关系、属性域和子类、坐标精度和分辨率等。

不支持通过参数定义的曲线(也称为圆弧曲线)。

3. 字段存储限制:

Shapefile无法存储:空值,无法向上舍入数字,对 Unicode 字符串的支持不足,字段名称最长只能为 10 个字符,且在同一字段中无法同时存储日期和时间。

Shapefile支持的最大字段数为 255。若超出此上限,当转换为 shapefile 时只会转换前 255 个字段。

dBASE 文件不支持类型 blob、guid、全局 ID、坐标 ID 或栅格字段类型。

包含空值的数据类型 空值替换
数字 - 当工具需要输出“空”、无穷大或 NaN(非数字)时 -1.7976931348623158e+308(最大负值的 IEEE 标准)
数字(所有其他地理处理工具) 0
文本 “ ”(空白 - 无空格)
Date 存储为零,但显示为“<空>”

4. 字段宽度限制:

地理数据库数据类型 dBASE 字段类型 dBASE 字段宽度(字符数)
对象 ID 数值 9
短整型 数值 4
长整型 数值 9
浮点型 浮点型 13
双精度 浮点型 13
文本 字符 254
Date Date 8

5. 性能限制

由于形状压缩方法的不同,shapefile 所占用的空间可能为文件地理数据库或 SDE 的三到五倍。

Shapefile 的空间索引效率较数据库低。这就意味着,同地理数据库要素类相比,空间查询耗时更长。当处理大量要素时,效率低。

dBASE 文件不支持 WHERE 子句,也不支持 SQL。

当保存所做编辑时属性索引会被删除,因此必须重新创建属性索引。

6. 多面体存储限制

Shapefiles 支持多面体,但不支持以下多面体的高级功能:纹理坐标、纹理及部分色带、光线法向量。

shp文件说明

shapefile 是存储地理信息的简单文件格式,但是工作中,常会接到用户的很多问题,这里把常见的汇总下。

一、shape 文件到底可以多大?

shapefile 的每个文件都不能超过 2 GB。也就是说,存储数据的 .dbf 与.shp 分别不能超过 2GB。但是,所有文件的总大小可以超过 2 GB。

二、 shape 文件是怎么构成的?

shape 文件用 ArcGIS 查看仅显示一个文件,但是用 windows 资源管理器查看就可能看到以下文件。

  • .shp - 存储要素几何的主文件;必需文件。
  • .shx - 存储要素几何索引的索引文件;必需文件。
  • .dbf - 存储要素属性信息的 dBASE 表;必需文件。
  • .prj - 存储坐标系信息的文件;由 ArcGIS 使用。
  • .xml - ArcGIS 的元数据 - 用于存储 shapefile 的相关信息。
  • .sbn 和 .sbx - 存储要素空间索引的文件。
  • .fbn 和 .fbx - 存储只读 shapefile 的要素空间索引的文件。
  • .ain 和 .aih - 存储某个表中或专题属性表中活动字段属性索引的文件。
  • .atx - .atx 文件针对各个 shapefile 或在 ArcCatalog 中创建的 dBASE属性索引而创建。
  • .ixs - 读/写 shapefile 的地理编码索引。
  • .mxs - 读/写 shapefile(ODB 格式)的地理编码索引。
  • .cpg - 可选文件,指定用于标识要使用的字符集的代码页。
  • 强烈建议,对shape操作时,在 ArcGIS 中进行。

三、 shape 中创建字段注意什么?

不能对现有字段修改,可以新建字段包括自定义数据类型;字段名长度不要超过10,超过会被截断。

新建字段时,有三个参数可供设置:

  • precision(精度)—— 数字字段中可存储的位数;
  • scale(标度)—— 浮点或双精度类型字段中数值的小数点右侧的位数;
  • length(长度)—— 字符型字段的文本字段的长度。

注意,long integer 当精度超过 10 时,会自动转为 Double 型。

Geodatabase是用来表达和管理地理信息的复杂数据模型,是ArcGIS的主要存储数据方式,主要存储了 featureclasses、 rasterdatasets、attributes、具有行为的高级GIS数据对象、 管理空间完整性的规则、要素栅格属性关系工具。

Geodatabase

就其种类呢,无非是三种:File Geodatabase,PersonalGeodatabase,ArcSDEGeodatabase。

1、 FileGeodatabase:以文件夹形式存储。每个Dataset作为一个文件存储,最大可达1T。对于PGDB更推荐FGDB。单用户,同一个Dataset 、独立的featureclass或者table,并发只能有一人写操作,可以多人读操作。支持跨平台。

2、PersonalGeodatabase:所有的Dataset都存储在MicrosoftAccess数据文件中,最大大小不超过2 GB。单用户,一个人写多人读。仅支持Windows。

3、ArcSDEGeodatabase:储存在关系数据库中,可使用 Oracle,MicrosoftSQL Server, IBM DB2, IBM Informix,PostgreSQL。这些多用户的数据库要求使用ArcSDE,不限制大小和用户的数量。平台支持:Windows, UNIX,Linux。

二、Geodatabase中的Dateset

Geodatabase 中包含基本的dataset,包括:feature classes、 rasterdatasets、attributes。还包含高级地理数据类型:coordinate systems, coordinateresolution, feature classes,topologies, networks, raster catalogs,relationships, domains。

1、Table
用于存储属性等。字段类型包含:Numbers(长整型、短整型、单精度、双精度)、Text、Date(日期时间型)、BLOBs(二进制大对象,例如Symbol、CAD几何要素)、GlobalID(全局标识符)、XML。

2、Feature Class
Feature Class以一张单独的表存储,每个要素是一条记录。种类: Points、Lines、Polygons、Annotation、 Dimensions(尺寸)、MultiPoints(由多个点组成的要素,如雷达激光点)、MultiPatches(多面体)。
其中要素坐标可包含Z值,表示垂直测量结果;线状要素可以包含M值,表示线性测量结果。路径是指具有唯一标识符和通用测量系统的任意线状要素(如城市街道、公路、河流或管线)。
与FeatureClass相关的:FeatureDataset,subtype,AttributeDomain,RelationshipClasses,Topology,Network Dataset,Geometric network,TerrainDataset,Linear referencing,Cartographicrepresentation,versioning。

3、Raster
栅格的地理属性通常包括:坐标系,参考坐标或 X,Y 位置(通常在栅格左上角或左下角),单元大小,行计数和列计数。
地理数据库可以针对多种用途管理栅格:作为单个数据集、数据集的逻辑集合和表中的图片属性.


http://www.taodudu.cc/news/show-4809999.html

相关文章:

  • 解析shp文件
  • Qt 界面加载卡顿或刷新问题
  • Qt界面美化的方式
  • Qt界面不自动刷新
  • QT关于界面常用设置
  • 21 间隙锁加锁规则
  • MySQL间隙锁详细分析
  • MySql进阶-间隙锁(gap-key)
  • python使用statsmodels包中的tsa.acf函数计算时间序列数据所有滞后位置个数(级别)的自相关性、tsaplots函数可视化时间序列数据所有滞后位置个数(级别)的自相关性
  • C++ vector 计算自相关性函数selfcorr
  • python使用statsmodels包中的tsa.acf函数计算时间序列数据所有滞后位置个数(级别)的自相关性(autocorrelation for every lag)
  • 机器学习参数|数学建模|自相关性
  • 基于Python回归模型的自相关性分析
  • Ubuntu查看OpenCV,Eigen,Ceres等库的版本
  • 查看Eigen、CMake、ceres、opencv版本
  • intouch 开发源程序加密方法
  • Wonderware-InTouch的历史趋势的历史数据导出为【Excel】表
  • Android WebView重定向
  • android webview卸载,安卓WebView清除localStorage
  • android webview获取Gps位置不准
  • Android WebView与JS的交互方式
  • android webview设置分辨率,Android WebView 设置参考
  • android webview 关闭缓存,Android WebView删除缓存
  • 图像风格迁移基础入门及实践案例总结
  • 基于图像风格迁移的人脸卡通化设计与实现
  • 图像迁移风格保存模型_一种图像风格迁移方法与流程
  • python图片风格迁移毕设_Python简单实现图像风格迁移
  • 图像风格迁移算法学习总结
  • 毕设 深度学习图像风格迁移 - opencv python
  • idea中安装统计代码statistic插件

arcgis中编码方式改变引起的shp文件乱码、字符截断问题处理相关推荐

  1. 【ArcGIS微课1000例】0014:ArcGIS中如何将kml(kmz)文件转shp,并进行投影转换?

    KML(Keyhole Markup Language,Keyhole 标记语言)最初是由Google 旗下的Keyhole 公司开发和维护的一种基于XML 的标记语言,利用XML 语法格式描述地理空 ...

  2. ArcGIS中ArcMap导入mxd地图文档文件出现红色感叹号、地图空白的解决

      本文介绍在ArcMap软件中,导入.mxd地图文档文件后图层出现感叹号.地图显示空白等情况的解决办法.   在ArcMap软件使用过程中,我们经常会需要将包含有多个图层的.mxd地图文档文件导入软 ...

  3. charset编码方式与字符集(为什么会乱码)

    背景 在微信小程序开发时,有时候请求的某些网页会出现乱码(尤其是爬取数据时),当我们在外部查看源码时,我们可以发现网页的编码格式不是utf-8 直接说解决方案 在请求求地址地址时,尝试加上charse ...

  4. 数据在计算机中编码方式教案,字符数据在计算机中的表示方法

    计算机中数据的概念是广义的,计算机除了处理各种数之外,还要处理大量符号,如英文字母.汉字等非数值的信息.例如,当要用计算机编写文章时,就需要将文章中的各种符号.英文字母.汉字等输入计算机,然后由计算机 ...

  5. 在arcgis中提取、添加与删除Shape文件Z值

    一.问题描述 有一批3d模型没有高程值:在BS平台上预览显示这些模型插入地下去了:预览效果非常差,因为Z值为都是0: 由于平台读取数据是geometry的Z值字段,而不是重新建一个字段,所以要改写ge ...

  6. python中的编码方式

    说明 这里我们以python2.7为例讲解python的编码方式 指定执行编码方式 python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及 ...

  7. java字符编码方式总结

    java字符编码方式总结一.概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题.为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要 ...

  8. java生成html 控制编码方式_JAVA中文字符编码问题详解 控制台输出

    JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...

  9. MyEclipse设置JSP页面默认编码方式

    MyEclipse设置JSP页面默认编码方式以及设置在Java文件中作者.日期等说明 MyEclipse设置JSP页面默认编码方式: windows(窗口)-Preferences(首选项)-MyEc ...

最新文章

  1. 在对话框中应用CScrollView显示图像
  2. ICML2020 | G2Gs:不依赖模板的的逆合成预测新框架
  3. @poj - 1509@ Glass Beads
  4. html中的input是一个块级元素,input属于什么元素,input是行内块元素吗
  5. python爬虫中for循环无法每一段输出_1024程序员节送你一套爬虫玩玩
  6. 猫、狗与Java的多态
  7. ManicTime软件破解
  8. hadoop集群swap_hadoop集群调优-OS和文件系统部分
  9. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
  10. IE浏览器下常见的CSS兼容问题
  11. 本来都对象棋失去兴趣了, 是特殊的原因让我又开始从侧面搞象棋方面的擦边的游戏...
  12. html表单电子邮件验证验证,详解JavaScript表单验证(E-mail 验证)
  13. RH850/F1x的PWM-Diag功能分析
  14. 互动媒体技术专题2——多视角认识十二个“一” 技术预演与方案设计
  15. 数字孪生,开启3D智慧园区管理新篇章
  16. 什么是主数据,如何做好主数据管理?
  17. Mac谷歌浏览器关闭自动更新,下载历史版本方法,解决不自动提示保存密码的问题
  18. mysql pdf教程_MySQL5.7从入门到精通(刘增杰 著)带书签完整版PDF[230MB]
  19. 决策树- 随机森林/GBDT/XGBoost
  20. 关于Pytorch中detach

热门文章

  1. 《大数据管理概论》一2.2 大数据融合的概念
  2. 【愚公系列】2023年02月 WMS智能仓储系统-015.基础设置(货主信息、运费设置、客户信息)
  3. springboot疫情物资管理系统的设计与实现
  4. Gannicus Guo的DIY TCP/IP之旅
  5. uCOS-II实时操作系统移植的大致步骤
  6. cmd命令行用copy和xcopy实现文件拷贝/目录复制
  7. python使用ddt_python数据驱动ddt的使用
  8. 公共场所安全蹭网andwifi热点软件构建安全网络!
  9. Python 爬取全国天气
  10. AES128加密算法与实现1