GDAL\OGR C#中文路径不支持的问题解决方法
2012-10-17 20:20
495 查看
昨天的博客里面使用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中文路径不能打开提供了一点点的思路吧。希望对大家有所帮助。
出现这个问题很奇怪,我自己编译的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中文路径不能打开提供了一点点的思路吧。希望对大家有所帮助。
相关文章推荐
- GDAL\OGR C#中文路径不支持的问题解决方法
- GDAL\OGR C#中文路径不支持的问题解决方法
- PHP basename 函数 linux下中文路径的问题解决方法
- c# 连接MySQL中文乱码问题的解决方法
- svn不支持中文路径问题的解决
- GADL/OGR C# 读取Dxf数据时,Feature的Layer属性中文乱码问题的解决
- svn不支持中文路径问题的解决
- 关于CppSqlite中数据库文件中文路径识别问题的解决方法
- 关于C#连接FTP时路径问题的解决方法
- Android Studio如何设置主题及不支持中文的问题解决方法
- GDAL读写dxf文件中文乱码问题解决方法(二)
- 关于GDAL180中文路径不能打开的问题分析与解决
- 使GDAL库支持中文路径或中文文件名的处理方法
- vs2005不支持中文路径解决方法
- Android Studio设置主题 和 不支持中文的问题解决方法
- Django 中文路径不支持解决方法
- 配置android时出现path问题,因为路径有中文,完美解决方法
- Apache HTTP Server路径不支持中文字符问题的解决办法
- 使GDAL库支持中文路径或中文文件名的处理方法