`
tansitongba
  • 浏览: 482064 次
文章分类
社区版块
存档分类
最新评论

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 即可:

具体步骤如下:
首先确定你是模拟器是中文,如果不是的话在开始菜单里面有设置Language的,换成中文就可以了;
然后你在用carbide或者是vs新建工程的时候选择中文,语言代号为31;
要在程序中显示中文,参考下面的代码:
TBuf <32> nameText;

CEikonEnv::Static()->ReadResource(nameText, R_NAME_TEXT);

gc.UseFont(iCoeEnv->NormalFont());

TPoint namePoint(aRect.Width()/5*3, aRect.Height()/4);

gc.DrawText(nameText,namePoint);
.rss中
#include "project.loc"
RESOURCE TBUF32 R_NAME_TEXT { buf=qtn_wp_name_text; }
.loc中
CHARACTER_SET UTF8
#define qtn_wp_name_text "中文"
很简单的一个处理就可以。
切忌在打开资源定义文件的时候改变编码,那样你会后患无穷的。
如果你一开始在建工程的时候就不是选择的中文的话,那么按下面的方法解决:
打开你的mmp文件,在里面最后加上一行LANG 31,如果以前有LANG SC就注释掉;
然后在你的资源定义文件开头加上CHARACTER_SET UTF8;
然后用文本文件方式打开,另存为,选择UTF-8字符编码的;
最后用编辑器打开,确定里面开头的部分没有乱码,要是开头的时候有就删除。

用第一种方法的缺点是这种字符串一般针对静态资源,如果是那种随时根据数据变化更新汉字的情况则需要考虑第二种情况
第二种情况动态转换字符集的方法

常使用CCnvCharacterSetConverter和CnvUtfConverter这两个类进行转化成Symbian系统认识的Unicode编码.

CCnvCharacterSetConverter类可以进行Symbian支持的所有编码转换

CnvUtfConverter这个类常UTF-8与Unicode 和UTF-7与Unicode之间的相互转换


添加头文件
#include <charconv.h> //for char set convert GBK - Unicode
在mmp里面添加
LIBRARY charconv.lib // for GBK to Unicode converter
这两步完成后,重新编译;下面的这两个函数就可以用了。
void CUTFConverterContainer::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 CUTFConverterContainer::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("云云^")) ;

即可,现在title16和msg16里面都存放的是16位的unicode中文字符串了,可以直接显示了。

分享到:
评论

相关推荐

    佳佳全能视频格式转换器 v11.8.0.0.zip

    并且采用智能编码方式,转换速度和质量堪称完美。比如可以将网上下载的RM、RMVB、MKV、VOB、DAT、MP4、3GP、DivX、XviD、AVI、VCD、DVD、SVCD、ASF、FLV、SWF、MOV、QT、MPEG、WMV、H.264视频转换为任意电脑、DVD机...

    闪电VCD格式转换器 v9.2.5.zip

    本软件采用了国际上最先进的编码和解码技术,所以转换质量极高,转换速度极快。软件操作简单,界面美观,支持软件换肤功能、支持视频预览、支持批量转换及自动关机功能。 闪电VCD格式转换器功能介绍: 1.支持各类...

    凡人AVI视频转换器 v11.8.5.0.zip

    7、 支持将AVI格式转换为3GP手机视频格式,Android手机视频格式,Symbian塞班手机视频格式。 8、 支持将HD AVI格式转换为AVI、DivX、H.264、XviD、MP4、MOV、MKV等HD高清视频格式。 9、 支持批量转换,转换质量极...

    凡人SWF视频转换器 v11.7.0.0.zip

    7、 支持将SWF视频格式转换为3GP手机视频格式,Android手机视频格式,Symbian塞班手机视频格式。 8、 支持将SWF视频格式转换为AVI、DivX、H.264、XviD、MP4、MOV、MKV等HD高清视频格式。 9、 支持批量转换,转换...

    闪电RM格式转换器 v9.2.0.zip

    《闪电RM格式转换器》是一款功能强大的RM视频格式转换工具,可以将RM和RMVB视频格式转换为各种常见的视频格式。比如将RM、RMVB转换为AVI、MP4、WMV、MPG、3GP、MKV、VOB等视频格式。还支持将RM、RMVB视频格式转换为...

    佳佳MKV转换器 v10.9.5.0.zip

    转换后的视频文件可以在电脑上、HD高清液晶电视、iPhone手机、苹果iPod、苹果iPad、3GP手机、智能手机、黑莓手机、塞班手机、安卓手机、MP4和MP5播放器上播放。 本软件是全功能、高集成的MPEG4/H264格式转换器,它...

    美河提供.智能手机操作系统编程Symbian及60系列1

    本书旨在把目前市场上最流行的也是持有最大市场分额的智能手机操作系统Symbian介绍给更广泛的人群。本忆较全面地覆盖了Symbian操作系统及编程等内容,主要包括开发环境、内存与资源管理、应用程序设计、控件、多媒体...

    智能手机操作系统编程Symbian及60系列

    本书旨在把目前市场上最流行的也是持有最大市场分额的智能手机操作系统Symbian介绍给更广泛的人群。本忆较全面地覆盖了Symbian操作系统及编程等内容,主要包括开发环境、内存与资源管理、应用程序设计、控件、多媒体...

    tengge py for s60编程教程

    7.9汉字编码查看器 8.0字符串的压缩解压 8.1取得文件大小和修改日期 8.2文件的十六进制读取写入 8.3文件路径的分割 8.4模拟按键 8.5按键捕获 8.6%格式化输出 8.7取得时间日期 8.8其他技术介绍 8.9.后台信息提示 9.0....

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     ×gSOAP 包含一个WSDL解析器(将WSDL转换为gSOAP头文件),可以自动化用户客户端及服务端的开发。  ×生成可以单独运行的web服务及客户端程序。  ×因为只需要很少内存空间,所以可以运行在类似Palm OS, Symbian...

    3G手机等嵌入式技术终端实现监控,视频会议,即时通讯的平台开发

    支持Symbian S60、苹果iPhone OS 3.0和谷歌Android平台的手机终端软件稍后将陆续发布,目前正在研发过程中。 手机硬件平台 最低硬件配置 CPU:TI OMAP 850,200MHz ROM:32M RAM:32M 推荐硬件配置 CPU:...

    新版Android开发教程.rar

    开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、...

Global site tag (gtag.js) - Google Analytics