GDAL\OGR C#中文路徑不支援的問題解決方案

來源:互聯網
上載者:User

昨天的部落格裡面使用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中文路徑不能開啟提供了一點點的思路吧。希望對大家有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.