开发版本: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("云云^")) ;
刚开始总是试验不成功,原来是第一步没有设置正确。好好调试吧,以上办法经过试验成功的。