symbian中文字符串显示问题的解决
相信大家都在处理symbian中文显示的时候遇到了这种问题,
我现在就给总结一下这种问题的解决方法:
字符串编码中文表示常用的有: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 即可
缺点是这种字符串一般针对静态资源,如果是那种随时根据数据变化更新汉字的情况
则需要考虑第二种情况
第二种情况动态转换字符集的方法
添加头文件
#include <charconv.h> // for char set convert GBK - Unicode
在mmp里面添加
LIBRARY charconv.lib // for GBK to Unicode converter
这两步完成后,重新编译;下面的这两个函数就可以用了。
void CMcAppUi::ConvGbk2Uni(TDesC8& original, TDes& res) {
#ifndef __WINS__
RFs aFileServerSession;
aFileServerSession.Connect();
CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,aFileServerSession)!=CCnvCharacterSetConverter::EAvailable)
User::Leave(KErrNotSupported);
TInt state=CCnvCharacterSetConverter::KStateDefault;
TPtrC8 str( original );
HBufC* iInfoText = HBufC::NewL( str.Length() );
TPtr16 ptr = iInfoText->Des();
if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, str, state))
User::Leave(KErrArgument);
res.Zero() ;
res.Copy(ptr) ;
aFileServerSession.Close();
CleanupStack::PopAndDestroy();
delete iInfoText;
#else
res.Format(_L("wayne len %d"), original.Length()) ;
#endif
}
void CMcAppUi::ConvUni2Gbk(TDesC& original, TDes8& res) {
#ifndef __WINS__
TInt state=CCnvCharacterSetConverter::KStateDefault ;
CCnvCharacterSetConverter* iConv ;
iConv = CCnvCharacterSetConverter::NewLC();
if(iConv->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
iEikonEnv->FsSession())!=CCnvCharacterSetConverter::EAvailable)
User::Leave(KErrNotSupported);
iConv->ConvertFromUnicode(res, original, state) ;
CleanupStack::PopAndDestroy() ;
#else
res.Format(_L8("wayne chen %s"), original) ;
#endif
}
具体的使用方法:
TBuf8<20> title8 ;
TBuf<20> title16 ;
TBuf8<20> msg8 ;
TBuf<20> msg16 ;
title8.Format(_L8("友情提示")) ;
ConvGbk2Uni(title8, title16) ;
msg8.Format(_L8(" 谢谢您的使用")) ;
ConvGbk2Uni(msg8, msg16) ;
ShowInfoDialog(title16, msg16) ;
即可,现在title16和msg16里面都存放的是16位的unicode中文字符串了,
可以直接显示了。
希望堆大家的开发有所帮助。
分享到:
相关推荐
symbian 中文字符串处理的各种方法,可以在三版和二版上运行
对于刚接触symbian平台的人来说,对于字符串的使用好像不是一件很轻松的事情,至少不如C++上手的那么快,尤其是对于 TPtr以及TPtrC的理解。 所以这个资源显得尤为有用,虽然不大,但可以让你迅速入门。
symbian中的字符串处理及简单的应用.zip
如题,是关于Symbian C++处理的文档, 有兴趣的饿就拿去ba!!!
symbian 中导入中文字符 symbian 中导入中文字符 symbian 中导入中文字符
Symbian中显示中文汉字(3种方法)
现在使用Visual Studio有一个令人很不爽的地方,就是处理描述符,因为你不能直接显示它们的内容(只能在模拟器的窗口里看到).这里有一个小技巧将可以让你显示Symbian描述符的内容.
Symbian塞班操作系统的介绍以及应用
Symbian S60 V5 进度条显示 源码
symbian 快速显示例子CDirectScreenAccess
Symbian塞班软件破解入门资料,新手值得一看~
symbian png图片显示,可以对png图片进行解码
Symbian(塞班)智能手机应用技巧十二讲
塞班3手机360手机宝盒软件支持
Symbian OS第四章 基本的类、字符串和动态数组
symbian 九宫格图片DEMO(下面显示汉字) 应论坛请求,发在论坛上。
Symbian os C++开发课件 第一章 概述.pps 第二章 Symbian概述.pps 第三章 使用SDK开发程序.pps 第四章 基本的类、字符串和动态数组.pps 第五章 内存分配及异常处理.pps 第六章 GUI应用程序框架....
UShow V0.4.sis UIQ 3.0 塞班手机电话归属地显示 可用于索爱p1i
塞班智能手机,Symbian系统智能手机签名工具,轻松安装各种软件