2012-11-23 27 views
0

我努力嘗試在我的Gtk/C++應用程序中設置wchar_t數組。由於某些未知的原因,Gtk方法沒有支持wchar_t數組但只支持gchar的重載形式。如何在包含寬字符的gtk中設置文本?

我讀過幾篇文章,讓我想知道它可能是一個可變寬度編碼問題,它是以常規UTF-8設置的。我試着這樣做:

std::wstring propertiesText; 

/* 
String Manipulation...  
*/ 

gtk_label_set_text((GtkLabel*)_propertiesLabel, propertiesText.c_str()); 

正如我所說的編譯器抱怨wchar_t的不受此方法的支持。

如果你可以以任何形式清除我的問題,甚至可以解釋一些關於這些可變寬度編碼/寬字符關係的內容。

回答

3

GTK建在Glib以上。 Glib已經深深地認爲所有的字符串都是UTF-8編碼的。另外wchar_t不是很便攜(在某些編譯器上,它可能是16位,在其他編譯器上可能是32位)。所以你應該避免在代碼中使用wchar_tstd::wstring。順便說一句,如果您使用C++編寫代碼(然後考慮使用Glib::ustring -s),您可能對Gtkmm感興趣。

如果因爲某些原因絕對需要使用std::wstring,您必須明確手動進行Glib UTF-8編碼字符串轉換(可能代價高昂)。

+0

要做到後者,你可以使用[iconv](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/iconv.h.html)(它包含在glibc中,也可作爲[單獨的庫](http://www.gnu.org/software/libiconv/))。在Windows上,您也可以使用[WideCharToMultiByte](http://stackoverflow.com/a/6864228/249167)。 –

+0

感謝您的建議Basile。 我用一個簡單的解決方案解決了這個問題, g_utf8_strlen(const gchar,gssize max); 它計算utf8格式的字符串。 希望這可以爲下一個絆倒這個問題的人節省時間。 – dcguim

相關問題