使用C#调用GDAL的OGR读取s57文件,中文乱码问题

clevenhxn 2010-08-17 10:05:20
由于工作需要,本人需要解析电子海图s57 文件,经过一个阶段的学习,本人打算采用 gdal/ogr 来解析,本人是做C#开发的,对于C++ 不是很了解,解析的时候实现的是 gdal/ogr 对C#的接口,采用ogrinfo.cs 文件进行解析,结果发现,基本的属性都能查询出来,但是,由于s57文件中包含中文文字,解析出来的内容却不是中文,而是乱码。
本人想通过编码转换,转成中文文字,但是都不行,最好的状态发现 前面的文字是正确的,而后面的不正确,例如"十万吨级锚地",最后通过转成Unicode编码,显示的是"十万吨级**"(**表示显示的是乱码) 最后两位不对,这是什么原因呢?
有没有高手处理过遇到过这个问题呢? 是如何解决的呢?

在C++下解决方案也可以

解析s57文件可以用 iso8211.lib 解析,这里面遇到的问题和 gdal/ogr 一样,因为 gdal/ogr 中的核心内容就是用的 iso8211
在这上面解决的也可以呀
...全文
489 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiaosky 2011-08-23
  • 打赏
  • 举报
回复
具体怎么解析啊,最近一直在琢磨这个东西.能把你的解析的程序给我一份吗.谢谢.
huxiaosky@163.com
sgeoffrey 2011-04-25
  • 打赏
  • 举报
回复
CSDN 新手,,我也想知道怎样用ogr读取风格信息啊 ,就是画多边形时的颜色信息。


最近在做海图解析,不知道怎么读取风格信息,高手帮忙解决啊
TearyWang 2010-12-25
  • 打赏
  • 举报
回复

string s = "乱码字符串";
byte[] srcBytes = System.Text.Encoding.UTF8.GetBytes(s); // 假设C#用的是UTF8编码,我不太确定
int count = 0;
// 计算到记录结束符号或字段结束符(0x1F、0x1E)的字节数
for (int i = 0; i < srcBytes.Length; i++)
{
if (srcBytes[i] != (byte)0x1F || srcBytes[i] != (byte)0x1E)
count++;
}
// 拷贝目标字符串,不包含记录或字段结束符
byte[] tagBytes = new byte[count];
for (int i = 0; i < tagBytes.Length; i++)
{
tagBytes[i] = srcBytes[i];
}
// 获得目标字符串
string tagStr = System.Text.Encoding.UTF8.GetString(tagBytes); // 假设C#用的是UTF8编码,我不太确定


这里,我不太确定的是,C#的内码用的是否为UTF8,若是UTF8则不用改什么,否则,需要在相关位置做更改。
xbt746 2010-10-29
  • 打赏
  • 举报
回复
windows下考虑使用api进行转换
好像是Multibyte什么的
swliujiao 2010-10-29
  • 打赏
  • 举报
回复
把读出来的字符串,用Encoding.Default转成byte数组,然后用Unicode获得字符串就是中文了
swliujiao 2010-10-14
  • 打赏
  • 举报
回复
您好,我现在也在做s57转shp,本想用ogr2ogr,但是发现转换的数据有问题,现在陷入了困境,您的程序能否给我一份,我不胜感激!谢谢了,swliujiao@sohu.com
starytx 2010-09-14
  • 打赏
  • 举报
回复
o ,忘了说了,那个源码是C++的,我也是用c++的
starytx 2010-09-14
  • 打赏
  • 举报
回复
s57文件的读取不是有一个国外的源码吗?我现在读取是没问题了(没试过国内地图),也弄明白了空间数据的关系,可不知道怎么处理颜色还有其他符号等信息,哪位大大有兴趣的话一起探讨,留个邮箱吧starytx@163.com
clevenhxn 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dujimache123 的回复:]

怎样用ogr读取风格信息啊 ,就是画多边形时的颜色信息。
[/Quote]
你是说ogr读取s52吗?不会吧?
dujimache123 2010-08-24
  • 打赏
  • 举报
回复
怎样用ogr读取风格信息啊 ,就是画多边形时的颜色信息。
gamemagic 2010-08-24
  • 打赏
  • 举报
回复
我建议你参考下s57文件结构,不要用任何库读取,而是自己写算法读取。这样哪里错了自己心里有个数
最好用unicode编码字符串
clevenhxn 2010-08-24
  • 打赏
  • 举报
回复
我一直没解决,你也遇到和我相同的问题吗?你也在弄s57?
dujimache123 2010-08-23
  • 打赏
  • 举报
回复
我也遇到这个问题了,不知你解决了吗,能把转中文的C#代码分享给我吗??谢谢。
dujimache123 2010-08-23
  • 打赏
  • 举报
回复
或者给我指点资料,我都不知道从哪下手。
dujimache123 2010-08-23
  • 打赏
  • 举报
回复
能把你的解析代码发我看看嘛?zhiwei1ffs@163.com
icansaymyabc 2010-08-17
  • 打赏
  • 举报
回复
你多贴几个错误示例出来,连乱码也要贴出来,看看有没有规律可循
clevenhxn 2010-08-17
  • 打赏
  • 举报
回复
我调用的是 gdal/ogr 中的样例代码 ogrinfo.cs 其中用到了个方法GetFieldAsString 该方法返回的是 char* 如果在C++下,可以考虑直接用 wchar* 强制转 就能显示正常的中文了,但是我是在C#下做的程序
gdal/ogr 采用的是swig封装,返回的是string 显示为乱码, 如何写程序才能使 乱码变中文呢?我怀疑swig封装之后会不会有损失?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧