carbide.c++ 开发 symbian 使用中文问题

开发版本:carbide.c++  2.3.0

symbian sdk: s60_3rd_fp1

 

1、模拟器支持中文。默认模拟器是英文,所有的中文显示都是方块。使模拟器支持中文的操作非常简单。开始-程序-S60 Developer Tools-3rd Edition FP1 SDK-1.0-languages-change to chinese。

 

2、通过资源文件

在carbide.c++中将资源文件(rls)转变为utf-8编码方式。非常简单:在文件单击右键,选属性,第一页上有选择。

将资源文件的字修改为中文,就OK了。

当然,资源文件头要添加:CHARACTER_SET UTF8 

 

然后在程序中,使用下面这个函数来创建资源
HBufC* CCoeEnv::AllocReadResourceL(TInt aResourceId) const

 

3、通过函数动态转换。网上推荐的是一下两个函数,这两个函数是自己添加的。使用前需要

添加头文件
#include <charconv.h>        //  for char set convert GBK - Unicode
mmp里面添加
LIBRARY         charconv.lib    // for GBK to Unicode converter

这两个都是手动添加的,添加库有没有其他方式,还没有找到。

主要,要定义一下 _WINS_常量,可以看到作者屏蔽了预编译的条件,道理是一样的。

 

 

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("云云^")) ;

 

刚开始总是试验不成功,原来是第一步没有设置正确。好好调试吧,以上办法经过试验成功的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值