GDAL\OGR C#中文路径不支持的问题解决方法

昨天的博客里面使用GDAL、OGR库写了一个用C#读取图像和矢量信息的一个小Demo。忘记测试中文路径了,今天测试了一下,发现中文路径果然不支持。如下图所示:

出现这个问题很奇怪,我自己编译的GDAL库中我已经修改GDAL的源代码,把里面的UTF8设置为NO了,怎么还是会出现这个问题呢?为了验证我的GDAL库版本是不是支持中文路径,使用gdalinfo.exe工具来进行验证,在命令行中输入“gdalinfo.exe F:\Data\TestData\6-图像镶嵌\PS镶嵌.img”,然后回车发现图像信息正常读取出来,如下图所示,这样看来问题不是出在GDAL库里面了,估计是C#的默认编码导致的。

接下来,就查看C#源代码的编码,找了好多,将文件名转为UTF8,结果还是不行,自己写了转换的函数(当然是找了很多资料才写出来了,C#菜鸟啊)。代码贴出来,不知道对不对:

private string ConvertString2UTF8(string strSrc)
        {
            string strTemp = strSrc;
            byte[] utf8bytes = System.Text.Encoding.Default.GetBytes(strTemp);
            byte[] utf8bytes2 = System.Text.Encoding.Convert(System.Text.Encoding.Default, System.Text.Encoding.UTF8, utf8bytes);
            strTemp = System.Text.Encoding.Default.GetString(utf8bytes2);
            return strTemp;
        }

转了还是不行,这就郁闷了。接着查看了一下C#源代码的默认保存编码,发现是UTF-8的编码(查看源代码的编码,可以在VS中,先打开源代码,然后在文件菜单下面有个高级保存选项,点开就可以看到当前的编码,也可以修改当前的编码),难道C#获取的文件名默认的就是UTF8的编码?于是在Gdal.AllRegister();的后面加了一句Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");【 注意:因为我之前在编译GDAL的时候,设置了GDAL_FILENAME_IS_UTF8的属性为NO,为了保持原来的样子,所以再在后面设置为YES,感觉之前做的都白费了。。。囧。。。 】。好了,保存,编译,运行,大功告成,中文路径终于识别了……截个图……泪奔啊……

再测试一个矢量文件,看看对不对,截图如下:

通过上面的验证,是不是可以这么认为,C#中的编码默认的都是UTF-8,所以在使用GDAL的时候,压根不需要对原来的代码进行修改就可以使用!?虽然这个观点没有足够的证据表明其是正确的,但是这个对使用GDAL中文路径不能打开提供了一点点的思路吧。希望对大家有所帮助。

转载于:https://www.cnblogs.com/xiaowangba/archive/2012/10/17/6314002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值