symbian中文字符串显示问题的解决

原创 2007年09月21日 14:18:00
 symbian中文字符串显示问题的解决
作者: 未知∣来源:∣原文地址∣2006-3-11
相信大家都在处理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 // 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中文显示的两大解决方案:静态和动态

字符串编码中文表示常用的有:GB2312,GBK,Unicode,UTF-8其中GBK是GB2312的超集,也就是涵盖了GB2312编码的所有内容,UTF-8是Unicode的在网络传输中的一种编码格...
  • yipast
  • yipast
  • 2011年04月07日 10:38
  • 205

彻底解决Symbian全屏显示问题

 收藏 最近总有同行问我Symbian全屏显示的问题,说是参考了网上的方法也无法设置成全屏。其实,归根结底还是不明白 Symbian框架的调用机制。这篇文章里我就来彻底研究一下Symbian全屏的机制...
  • dymx101
  • dymx101
  • 2011年04月09日 22:52
  • 395

symbian 中文字符串

  • 2009年02月07日 13:34
  • 54KB
  • 下载

Symbian 显示中文资源

文章比较老,但有借鉴价值。 本文使用的模拟器为S60 2.1 Chinese版SDK附带的,此模拟器支持中文,其他英文版本的模拟器不在本文讨论范围之内。1.  将中文字符串定义在单独头文件中,用记事本...
  • cyforce
  • cyforce
  • 2011年04月02日 13:34
  • 498

symbian S60 3rd的中文菜单显示 .

刚刚学习S60开发,环境都搭建起来了。整了一个HelloWorld玩玩,编译成SIS文件传到我的手机(Nokia 5800XM)上,程序居然也可以跑起来。兴奋之余,也感觉有点不爽:菜单全部是我不喜欢的...

关于IDA显示中文字符串的问题

IDA显示中文字符串总是乱码,很不给力有木有!思索良久,忽然想起《加密与解密》第三版上曾经对此有所提及,所以赶紧翻书查看解决方案,说是要修改ida.cfg这个配置文件。 所以,来到IDA的安装目录,...
  • vb2010
  • vb2010
  • 2011年11月15日 13:02
  • 891

symbian OS:解决S60列表框上下滚动出现列表项覆盖,失去焦点的列表项仍高亮的问题

这两天弄个简单的s60列表框。没想到出现以下的意外: 第一个图正常显示,第二个图,按下down键后,焦点下移,但是前一个列表项仍高光。   第三个。列表项滚动发生覆盖。   原因查出来了...

解决java中compareTo比较中文字符串时错误结论的问题

今日在使用java中compareTo比较中文字符串时得到了错误的结论,于是百度了一下有了些收货。 不知道代码的原作者是谁了,但是很感谢原作者。从网站上拿过来的代码有些错误,我重新整理了一下。 /...

mac环境下mysql插入中文字符串报错问题解决

最近搭建数据库时,用mysql workbench向数据库插入中文数据时,出现报错问题,上网查了一下发现是mysql编码问题,现把问题及决绝方法记录一下: 1. 环境 系统:macos10.12...

解决Spring MVC @ResponseBody返回中文字符串乱码问题

SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,中文会乱码   原因是因为其中字符串转换和对象转换用的是两个转换...
  • wmq534
  • wmq534
  • 2014年05月28日 14:58
  • 518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:symbian中文字符串显示问题的解决
举报原因:
原因补充:

(最多只允许输入30个字)