问题描述
由于工作需要,本人需要解析电子海图s57文件,经过一个阶段的学习,本人打算采用gdal/ogr来解析,本人是做C#开发的,对于C++不是很了解,解析的时候实现的是gdal/ogr对C#的接口,采用ogrinfo.cs文件进行解析,结果发现,基本的属性都能查询出来,但是,由于s57文件中包含中文文字,解析出来的内容却不是中文,而是乱码。本人想通过编码转换,转成中文文字,但是都不行,最好的状态发现前面的文字是正确的,而后面的不正确,例如"十万吨级锚地",最后通过转成Unicode编码,显示的是"十万吨级**"(**表示显示的是乱码)最后两位不对,这是什么原因呢?有没有高手处理过遇到过这个问题呢?是如何解决的呢?在C++下解决方案也可以解析s57文件可以用iso8211.lib解析,这里面遇到的问题和gdal/ogr一样,因为gdal/ogr中的核心内容就是用的iso8211在这上面解决的也可以呀我调用的是gdal/ogr中的样例代码ogrinfo.cs其中用到了个方法GetFieldAsString该方法返回的是char*如果在C++下,可以考虑直接用wchar*强制转就能显示正常的中文了,但是我是在C#下做的程序gdal/ogr采用的是swig封装,返回的是string显示为乱码,如何写程序才能使乱码变中文呢?我怀疑swig封装之后会不会有损失?
解决方案
解决方案二:
这个问题可能是文件的字符编码问题,挺烦人的。我以前弄shp文件的时候遇到过..当时我是在arcgis里把编码改成utf-8了
解决方案三:
我可以确定就是文件的字符编码的问题,000文件的内容都是单字节的,但是中文是双字节的,在解析的时候,是采用单字节解析的双字节,所以在C++里面直接转就可以了,可是我用的是C#,传出来的是单字节,我在C#中转Unicode出来,开头是正确的,结尾却不对这个问题,太郁闷了,找了很多帖子,都没有一个解决的。
解决方案四:
你好,我最近也在研究S57的内容,请问ogrinfo.cs文件你是从哪里找到的,我只找到C++的文件,但是C++不太了解,还是想用C
解决方案五:
#今天刚看到你的贴子,这个问题我在2003年的时候就遇到了,用的是VC++,S57标准规定只有NATF字段可以存贮本地化文字,采用的是Unicode编码,而中文系统默认的GB2312或GBK,所以要在中文系统中正确显示,需要进行转换,有UnicodeToGbk转换函数可供使用。
解决方案六:
同感,似乎是编码问题
解决方案七:
我也遇到了这个问题,上网搜索了一下,找到了原因:http://blog.csdn.net/liminlu0314/article/details/7330036C#只需要在加载文件前执行下边的语句乱码就不会出现了OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING","");//解决中文乱码问题
解决方案八:
您好,我现在也在用C#GDAL读取海图数据,遇到和您一样的问题,请问中文乱码的问题您是如何解决的呢?求指导