我有一個C#/ Mono/Gtk#程序,它簡單地加載在窗口中放入的文件作爲Gdk.Pixbuf並顯示它們。如何在Windows中從Unicode文件名創建Gdk.Pixbuf?
它在Ubuntu上運行良好。但在Windows上,如果我嘗試使用非ASCII文件名(如C:\áéíóú.jpg)刪除文件,程序將崩潰。我認爲這是我的代碼第一個問題。所以我做了一個簡單的測試用例。
Console.WriteLine("{0} exists? {1}", Filename, File.Exists(Filename));
Pixbuf pixels = new Pixbuf (Filename)
輸出
C:\áéíóú.jpg存在?真
GLib.GException:無法打開文件「C:\áéíóú.jpg」:沒有這樣的文件或目錄
事實證明,油嘴想不通的是存在的文件,是否存在。我不知道如何解決這個問題,以便我可以從一個Unicode文件名中將一個圖像文件加載到Windows上的Pixbuf中。
您確定文件名字符串是UTF8編碼,並且磁盤上的文件名編碼也是UTF8嗎? – ptomato
我不確定。當我執行drag'n'drop時,我閱讀Gtk +總是使用UTF-16編碼。因此,我將從drag'n'drop收到的數據編碼爲UTF-16。但是,如果我將文件名作爲命令行參數或通過Gtk文件打開對話框傳遞,我會得到相同的結果。如果您認爲通過Gtk獲得的文件名對於Gdk無效,那這很奇怪。 – OdraEncoded
GTK從不使用UTF-16進行編碼。你一定看錯了。 GLib在內部使用UTF8,除了編碼文件名(在Windows上是UTF8),甚至通常在現代Unix上使用UTF8。 – ptomato