wxwidgets顯示中文

解決:wxString s = wxT("中文");

參考:http://blog.csdn.net/eyefamily/article/details/7516793

1. windows下
wxWidgets 2.9.1 , VC2005編譯, Unicode  

wxWidgets 2.9.1 , mingw32編譯, Unicode
事實證明用這兩個編譯器產生的代碼對中文亂碼沒有影響,因此合併討論。
程序1:
文件使用ANSI編碼
const char* a = "你好";
wxMessageBox(wsString(a), wxT("完整"));
結果:彈出窗體顯示正常。
解釋:此時由於文件是ANSI編碼,所以使用是windows的代碼頁,wxString自動進行轉碼,a的長度是5.每個漢字2個字節。


程序2:
文件使用UTF-8編碼:
const char* a = "你好";
wxString b = wxString::FromUTF8(a);
wxMessageBox(b, wxString::FromUTF8("萬qua "));
結果:彈出窗體顯示正常。
解釋:此時由於文件是UTF-8編碼,a的長度是7.每個漢字3個字節。


程序3:
文件使用UTF-8編碼:
const char* a = "你好";
wxMessageBox(wxString(a), wxString("萬qua "));
結果:彈出窗體顯示亂碼。
解釋:此時由於文件是UTF-8編碼,wxString由windows默認碼頁自動轉碼,引起混亂。並且,更爲嚴重的是,所有菜單裏定義的中文都變成亂碼,只有通過wxString::FromUTF8("中文")才能使中文正常顯示。


總結:windows下只能對文件使用ANSI編碼,此時才能最大限度的保證wxString可以正常使用,否則程序中的所有字符都需要經過FromUTF8處理,基本上不太可能這樣編程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章