• 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中文路径不能打开提供了一点点的思路吧。希望对大家有所帮助。

  • 相关阅读:
    开发中使用的一些小知识
    vue form表单验证
    团队作业8——第二次项目冲刺(Beta阶段)--第五天
    团队作业8——第二次项目冲刺(Beta阶段)--第四天
    团队作业8——第二次项目冲刺(Beta阶段)--第三天
    团队作业8——第二次项目冲刺(Beta阶段)--第二天
    团队作业8——第二次项目冲刺(Beta阶段)--第一天
    Beta版本冲刺计划及安排
    团队作业7——Alpha冲刺之事后诸葛亮
    团队作业6——展示博客(Alpha版本)
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314002.html
Copyright © 2020-2023  润新知