Symbian 關於字元編碼轉換

巴扎黑
發布: 2016-12-20 14:51:45
原創
1208 人瀏覽過

字串編碼中文表示常用的有:GB2312,GBK,Unicode,UTF-8
其中GBK是GB2312的超集,也就是涵蓋了GB2312編碼的所有內容,
UTF-8是Unicode的在網路傳輸中的一種編碼格式,
如果我們使用vc做為開發工具,在win下面進行開發,那麼win
的預設字元集是GBK的,而symbian系統預設的編碼方式卻是
Unicode,也就是說直接寫在程式裡面的漢字在手機上顯示的時候,
就會變成亂碼。
通常解決這個問題的方法有兩種:
(1)靜態資源文件解決方案
(2)動態的調用字符集轉換函數解決方案

對呀第一種解決方案來說,需要手動編輯rss文件,把漢字內容部分改為UTF-8格式,
在rss文件的末尾或者開頭添加:CHARACTER_SET UTF8 即可
缺點是這種字符串一般針對靜態資源,如果是那種隨時根據數據變化更新漢字的情況
則需要考慮第二種情況

第二種情況動態轉換字元集的方法

常使用CCnvCharacterSetConverter和CnvUtfConverter這兩個類別進行轉換成Symbian系統認識的UnicodeC.
CCnternter所有編碼轉換

CnvUtfConverter這個類常UTF-8與Unicode 和UTF-7與Unicode之間的相互轉換


新增頭檔
#include GB mmp裡面加入
LIBRARY charconv.lib // for GBK to Unicode converter

這兩步驟完成後,重新編譯;下面的這兩個函數就可以用了。
void CMcAppUi::ConvGbk2Uni(TDesC8& original, TDes& res) {
#ifndef __WINS__

CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
KCharacterSetIdentifierGbk,aFileServerSession)!=CCnvCharacterSetConverter::EAvailable)
TInt state=CCnvCharacterSetConverter::KStateDefault;

TPtr Length() );
TPtr16 ptr = iInfoText->Des();

tr, str, state))
User::Leave(KErrArgument);
.Zero() ;
res.Copy(ptr) ;
aFileServerSession.Close(); delete iInfoText;
#else
res.Format(_L("wayne len %d"), original.Length()) ;
#endif
}

void CMcAppUi::ConvUni2Gbk(TDesC& original, TDes8& res) {
#ifndef __WINSSetter KStateDefault ;
CCnvCharacterSetConverter* iConv ;
iConv = CCnvCharacterSetConverter: :NewLC();
if(iConv->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
ter::EAvailable)
User::Leave(KErrNotSupported);
) ;
CleanupStack::PopAndDestroy() ;
#else
res.Format(_L8("wayne chen %s"), original) ; #endifTB
} TBuf title16 ;
TBuf8 msg8 ;
TBuf msg16 ;
title8.Format(_L8("友情提示")) ;
ConvGbk2Uni(title8, title16) ;
msg8.Format(_L8(" 謝謝您的使用")) ;
ConvGbk2Uni(msg8, msg16) ;
ShowInfoDialog(title16, msg16) ;
即可,現在title16和msg16裡面都存放的是16位元的uniho

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!