gdal库不支持中文路径和中文字段的解决方法

来源:互联网 发布:u盘安装ubuntu系统教程 编辑:程序博客网 时间:2024/06/13 10:59
今天遇到了个问题,在VS2008下面,用GDAL打开影像时,一直出现问题,调试了好半天,先是将QString类型的路径名转为char*,试了诸多方法,不管怎么转,就是提示错误,后来直接用char*指向路径名,还是出错,路径名不含中文时完全没问题。于是问题不在这里,问题在GDALOpen这个函数上,这就奇怪了,Linux下用的GDAL都不会出现这种问题,Windows的VS2008下就有这种问题。在网上找到一篇文章http://blog.csdn.net/liminlu0314/article/details/6610069,顿时解决了问题。


原因如下:用的是最新的GDAL1.9,GDAL中有一个函数CPLGetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES" )判断,通过判断是否是UTF8的编码,而且指定的默认值还是UTF8编码,在含有中文路径的字符串大多数的编码应该是GBK的编码,这样,系统就将GBK的编码当做UTF8的编码来进行转换,结果就是汉字全部是乱码,导致的结果就是找不到文件,所以打不开。


解决方法:


不改变GDAL源代码,在自己调用GDALRegisterAll()和OGRAllRegiser()函数后,加上下面一句即可。

CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");



GDAL不同的版本对中文的默认支持不一,有时候默认支持,有时候需要自己去设置。

这里分别写出C++和C#的设置代码

---------支持中文路径

C++: CPLSetConfigOption( "GDAL_FILENAME_IS_UTF8", "NO" );

C#:Gdal.SetConfigOption( "GDAL_FILENAME_IS_UTF8", "NO" );(C#中文路径大多数情况下不需要加这条语句,加了反而出错,情况比较复杂)

有时候需要写C#:Gdal.SetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES" );虽然不知道为什么


-----------支持中文字段(属性字段乱码)

C++:CPLSetConfigOption( "SHAPE_ENCODING", "" );

C#:Gdal.SetConfigOption( "SHAPE_ENCODING", "" );


阅读全文
0 0
原创粉丝点击