Android下可用的wide char 函數庫

來源:互聯網
上載者:User

原文發布:http://www.hellocpp.net/Articles/Article/779.aspx
    附件也請到這裡去下載, csdn不知道怎麼上傳附件。如果上面的網頁打不開,說明我還沒找到後台管理的密碼,稍後想起來了,文章審核到前台就看到了。
    附件地址 http://www.hellocpp.net/Common/Download.aspx?attachment_id=446 。 但願你能下的到。
    
    Android的NDK對unicode支援的非常差,準確說是wide char系列函數支援都很差。很多函式宣告和連結都沒問題,但是不工作,用了以後沒效果。這裡提供一套可以用的寬位元組函數庫。使用非常簡單,對應的函數後面都加 _x 尾碼。

     代碼從我的引擎裡出來的,編譯的時候編譯錯誤自己處理下,ds_string 和 ds_wstring改成 string和wstring 就好了。另外,_XEVOL_BASE_API_ 你自己看著辦吧。哈哈。 

     大部分的函數類似 wcslen的實現是從glibc裡來的,問題不大。

     主要是swprintf和swscanf函數。

     這兩個函數在glibc裡巨複雜。

     這裡介紹一下我的處理方式:

     對於swscanf 。我只是用來格式化輸入一些資料的,不會出現輸入字串的現象。於是我是先將它轉成 ansi的字串,調用ansi的sscanf函數來完成。

     對於swprintf。 則是自己寫了一個。最終是分段調用sprintf函數。

 

第二個部分是編碼方式的問題。

在Android低版本中是沒有wcstombs這樣的函數的,你可以編譯過去。但是載入會找到不符號的。

所以,還是別用這樣的函數了。

我們這裡預設使用多位元組編碼是utf-8。所以說。所有的char* 都是utf-8字串。那麼同樣的UnicodeToLocale轉出來的就是utf-8字串。 Locale == utf-8。這個在Linux下也是非常合理的。

這組函數類似如下:

XEvol_UnicodeToLocale

XEvol_Utf8ToUnicode。

這裡utf-8 utf-16(vc下的wchar_t)和utf-32之間的轉換我是扒了iccu的代碼。可信度還是非常高的。

有這一套函數可以徹底的跟iconv說拜拜了。

 

另外,老衲還是建議,盡量別用swprintf和swscanf這兩個函數,用wstringstring吧。 stlport對這個的支援還是不錯的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.