gdal庫不支援中文路徑和中文字段的解決方法

2021-08-08 10:57:42 字數 1058 閱讀 5487

今天遇到了個問題,在vs2008下面,用gdal開啟影像時,一直出現問題,除錯了好半天,先是將qstring型別的路徑名轉為char*,試了諸多方法,不管怎麼轉,就是提示錯誤,後來直接用char*指向路徑名,還是出錯,路徑名不含中文時完全沒問題。於是問題不在這裡,問題在gdalopen這個函式上,這就奇怪了,linux下用的gdal都不會出現這種問題,windows的vs2008下就有這種問題。在網上找到一篇文章頓時解決了問題。

原因如下:用的是最新的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", "" );

linux vi 不支援中文

問題說明 網頁html與chi語言的結合,使用c語言輸出html語句,因為其中用到中文,出現亂碼 問題解決 1.在cgi中用到的 使用utf 8編碼,utf 8是國際統一的中文編碼 具體語句為 fprintf cgiout,metacharset utf 8 參考文章 2.上述步驟完成後,重新編譯,...

ubuntu server 不支援中文顯示

今天發現ubuntu server有乙個問題,就是不支援中文顯示。執行touch 哈哈,檔案建立成功,但使用ls檢視檔名的話,顯示的是一堆問號。有意思的是,想刪除它的話,必須使用rm 哈哈才可以,使用rm 的話是不行的。檔案中的中文也顯示為幾個問號。我從網上查了一下,執行了一下下面的命令 dpkg ...

Calcium不支援中文VS

如果有人用過calcium這個wpf的框架,我猜測都是在英文環境下使用的。總之這個東西整整花了我一天的時間去搞,sdk的安裝非常的簡單,簡單到傻瓜化的地步,而我用的清華的正版vs2010和2008都看不到新建calcium專案的選項,嘗試了很久一直被抑鬱,堅定地不重灌系統一遍又一遍的嘗試,最後發現同...