日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wxWidgets随笔(7)-utf8中文(3)

發布時間:2025/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wxWidgets随笔(7)-utf8中文(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
wxMessageBox("Hello, world!"); wxMessageBox(L"Salut \u00E0 toi!"); // U+00E0 is "Latin Small Letter a with Grave"

注意,與wxWidgets一起使用的窄字符串通常被認為是當前語言環境編碼,因此寫入

wxMessageBox("Salut à toi!");

如果用戶系統上使用的編碼與ISO-8859-1不兼容,則無法工作(對于gcc,即使源代碼是在不同的地區編譯的)。特別是,在現代Unix系統下最常用的編碼是UTF-8,由于上面的字符串不是有效的UTF-8字節序列,在這種情況下根本不會顯示任何內容。因此,重要的是永遠不要在程序源代碼中直接使用8位(而不是7位)字符,而是使用寬字符串,或者寫:

wxMessageBox(wxString::FromUTF8("Salut \xC3\xA0 toi!"));// in UTF8 the character U+00E0 is encoded as 0xC3A0

以類似的方式,wxString以wchar_t或char字符緩沖區的形式提供對其內容的訪問。當然,后者只在字符串包含當前語言環境編碼中可表示的數據時才有效。如果字符串最初是由一個窄字符串構造的,或者它只包含7位ASCII數據,但如果不是這樣,就不能保證轉換成功。與上面的wxString::FromUTF8()示例一樣,您總是可以使用wxString::ToUTF8()來檢索UTF-8編碼的字符串內容—這與使用當前語言環境轉換為char*不同,它不會失敗。
有關wxString如何工作的更多信息,請參見wxString概述。
總而言之,wxWidgets中的Unicode支持對于應用程序來說是透明的,如果您使用wxString對象來存儲程序中的所有字符數據,實際上沒有什么特別的事情要做。但是,您應該了解以下部分所涉及的潛在問題。

wxWidgets在所有系統下默認使用wxString實現中的系統wchar_t。因此,在Microsoft Windows下,UCS-2 (UTF-16的簡化版本,不支持代理字符)在這個平臺上被用作wchar_t是2字節。在Unix系統下,包括Mac OS X,默認使用UCS-4(也稱為UTF-32),但是也可以通過傳遞-enable-utf8選項進行配置來構建wxWidgets在內部使用UTF-8。
wxString提供的接口與內部使用的格式是獨立的。然而,不同的格式有特定的優點和缺點。值得注意的是,在Unix下,底層圖形工具包(例如GTK+)通常使用UTF-8編碼的字符串,并且對wxWidgets中的字符串使用相同的表示形式,這樣就可以避免每次在UI中顯示或從中檢索字符串時將UTF-32轉換為UTF-8,反之亦然。對于小字符串,這種轉換的開銷通常可以忽略不計,但對于某些程序來說可能很重要。如果你相信它將有利于使用utf - 8的字符串在您的特定應用程序,你可能重建wxWidgets使用utf - 8作為解釋上面(注意,這是目前不支持微軟的Windows操作系統下,可以說是沒有多大意義的Windows本身并不使用utf - 16和utf - 8),但一定要注意性能影響(見使用utf - 8)性能的影響,使用utf - 8 wxString之前這樣做!
一般來說,您應該只在特定的環境中使用非默認的UTF-8構建,例如,在資源受限的系統中,轉換的開銷(以及與歐洲語言的UTF-32相比,UTF-8的內存使用量減少)可能很重要。如果您的程序正在運行的環境是在你的控制之下——通常情況下這樣的場景——考慮確保系統總是使用utf - 8語言環境和使用-enable-utf8only配置選項來禁用支持其他地區和考慮所有字符串utf - 8。這進一步減少了代碼的大小,并且在更多的情況下不需要轉換。
Unicode相關的預處理器符號
現在將wxUSE_UNICODE定義為1,以表示對Unicode的支持。可以在MSW的setup.h中顯式地將其設置為0,也可以在Unix下使用-disable-unicode,但強烈建議不要這樣做。默認情況下,wxUSE_UNICODE_WCHAR也被定義為1,但是在UTF-8構建中(在前一節中描述),它被設置為0,而通常為0的wxUSE_UNICODE_UTF8被設置為1。在后一種情況下,wxUSE_UTF8_LOCALE_ONLY也可以設置為1,表示所有字符串都被認為是UTF-8。

// first test, using exotic characters outside of the Unicode BMP: wxString test = wxString::FromUTF8("\xF0\x90\x8C\x80");// U+10300 is "OLD ITALIC LETTER A" and is part of Unicode Plane 1// in UTF8 it's encoded as 0xF0 0x90 0x8C 0x80 // it's a single Unicode code-point encoded as: // - a UTF16 surrogate pair under Windows // - a UTF8 multiple-bytes sequence under Linux // (without considering the final NULL) wxPrintf("wxString reports a length of %d character(s)", test.length());// prints "wxString reports a length of 1 character(s)" on Linux// prints "wxString reports a length of 2 character(s)" on Windows// since wxString on Windows doesn't have surrogate pairs support! // second test, this time using characters part of the Unicode BMP: wxString test2 = wxString::FromUTF8("\x41\xC3\xA0\xE2\x82\xAC");// this is the UTF8 encoding of capital letter A followed by// 'small case letter a with grave' followed by the 'euro sign' // they are 3 Unicode code-points encoded as: // - 3 UTF16 code units under Windows // - 6 UTF8 code units under Linux // (without considering the final NULL) wxPrintf("wxString reports a length of %d character(s)", test2.length());// prints "wxString reports a length of 3 character(s)" on Linux// prints "wxString reports a length of 3 character(s)" on Windows

為了更好地解釋上述內容,請考慮上述示例的第二個字符串;它由3個字符和最后的NULL組成:

可以看到,UTF16編碼很簡單(對于BMP中的字符),在本例中,UTF16編碼的wxString占用8個字節。UTF8編碼更詳細,在本例中使用了7個字節。
一般來說,對于包含很多拉丁字符的字符串,UTF8在內存占用方面比UTF16有很大的優勢,但是對于一些常見的操作,如長度計算,則需要更多的處理。
最后,請注意,wxString用于存儲Unicode代碼單元(wchar_t或char)的類型總是類型指定為wxStringCharType。

可這樣使用UTF8中文

const wchar_t* a =L"歡迎使用wxWidgets!"; SetStatusText(wxString(a)); wxMessageBox(L"我的第一個程序",L"關于 Hello World", wxOK | wxICON_INFORMATION ); const wchar_t* a =L"歡迎使用wxWidgets!"; SetStatusText(a);

總結

以上是生活随笔為你收集整理的wxWidgets随笔(7)-utf8中文(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久亚洲精品无码va白人极品 | 男女拍拍拍 | 黄色片网站在线免费观看 | 91中文字幕在线观看 | xxxx日韩 | 女人特黄大aaaaaa大片 | 天堂色在线 | 99热这里只有精品3 成年人黄色网址 | 亚洲欧美视频一区二区 | 久久精品一区二区三区不卡牛牛 | 成人国产av一区二区三区 | 狠狠人妻久久久久久综合 | 国产九色在线 | 新av在线| 狠狠操狠狠操 | 日韩欧美精品一区二区三区 | 国产亚洲无码精品 | av在线三区 | 亚洲乱熟女一区二区三区小说 | 成人免费毛片视频 | 国产人妖在线 | 刘亦菲国产毛片bd | 国产一区视频在线播放 | 青青草免费观看 | 波多野久久| 亚洲国产中文字幕 | 91超级碰| 久久久久女 | 538任你躁在线精品免费 | 中文在线国产 | 51妺嘿嘿午夜福利 | 成人播放器| 啪网址 | 伊久久| 麻豆国产在线 | 成人av电影在线播放 | 国产精品福利网站 | 自拍中文字幕 | 国产午夜视频在线观看 | 午夜亚洲aⅴ无码高潮片苍井空 | 亚洲第一色视频 | 后进极品美女圆润翘臀 | 成人一区二区三区在线观看 | 爱爱爱免费视频 | 日本午夜免费 | 久久久av免费 | 国产视频xxx| 免费黄色欧美 | 欧美巨鞭大战丰满少妇 | 在线aa| 欧美三级一区 | 欧美一区二区三区成人精品 | 国产性自拍 | 超碰日日夜夜 | 亚洲精品欧洲精品 | 五月婷婷六月天 | 国产成人精品无码免费看在线 | 日日夜精品 | 中文亚洲av片不卡在线观看 | 久久久久国产一区二区三区潘金莲 | 香蕉伊思人视频 | 在线色播 | 欧美日韩在线免费视频 | 亚洲中文字幕97久久精品少妇 | 性欧美大战久久久久久久免费观看 | 樱空桃在线 | 久久午夜福利电影 | 夜夜躁日日躁狠狠久久av | av女优天堂在线观看 | 国产中文字幕亚洲 | 无码人妻丰满熟妇啪啪欧美 | www操操操 | 素人一区二区三区 | 色福利hd写真video | 日本午夜一级 | 免费看的黄色网 | 99riav在线 | 性――交――性――乱 | 日本国产一区二区三区 | 九九精品在线观看 | 激情小说亚洲色图 | 亚洲欧美日本在线 | 亚洲一区二区精华 | 精品中文字幕在线播放 | 久草视频这里只有精品 | 中国少妇高潮 | 裸体黄色片| 亚洲视频一区二区 | 玖玖色资源 | 国产精品1区 | 泰坦尼克号3小时49分的观看方法 | 久草热在线 | 久久久久久无码午夜精品直播 | 91看片淫黄大片91桃色 | 日韩成人专区 | 欧美日韩在线中文字幕 | 久久亚洲美女 | 中国女人真人一级毛片 | 丰满岳乱妇一区二区三区 |