关于使用\Symbian\7.0s\Series60_v21_C 这个版本的中文转换的问题?
如题中文转换:用到的头文件及 link 都加了
#include <charconv.h>
#include <e32des16.h>
#include <f32file.h>
Link against:
euser.lib
estor.lib
charconv.lib
efsrv.lib
void CSymWorkAppView::Draw(const TRect& aRect) const
{
// Clear the screen
CWindowGc& gc = SystemGc();
gc.Clear(Rect());
gc.SetBrushColor(KRgbWhite);
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.SetPenColor(KRgbBlack);
const CFont* fontUsed;
fontUsed = iEikonEnv->TitleFont();// she zhe font ;
gc.UseFont(fontUsed);
TText8 *str = (TText8*)"中文转换N7610";
HBufC16* msg = ChangeToUnicode(str); //调用转码,str类型为TText8*
TBuf<80> buf;
buf.Copy( msg->Des() );
delete msg;
msg = NULL;
gc.DrawText(buf,TPoint(10,50));
gc.DrawRect( aRect );
}
HBufC16* CSymWorkAppView::ChangeToUnicode(TText8* aOrigin)
{
//创建一个转换器且转换器放入清除栈
CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
RFs fs;
//需要打开文件服务器
User::LeaveIfError(fs.Connect());
//判断传入的源字符串是否GBK\GB2123码
if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
fs)!=CCnvCharacterSetConverter::EAvailable)
{
//如果不是GBK\GBK2123码就退出
fs.Close();
CleanupStack::Pop(converter);
delete converter;
User::Leave(KErrNotSupported);
}
//TText8* str = aSource;
TText8* str = aOrigin;
TInt state=CCnvCharacterSetConverter::KStateDefault;
TPtrC8 source( aOrigin );
HBufC* iInfoText = HBufC::NewL( source.Length() );
TPtr16 ptr = iInfoText->Des();
if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, source, state))
User::Leave(KErrArgument);
//转换完成并清除转换器
CleanupStack::PopAndDestroy();
fs.Close();
//返回unicode编码的描述符,记得在调用这个函数显示中文后要删除此描述符
return iInfoText;
}
以上是用到的代码大家给看看问题出在哪里??只要我调用这代码,程序就自动关闭了,说不支持此功能 .... --------------------编程问答-------------------- User::Leave(KErrNotSupported);
后面最好加上return; --------------------编程问答-------------------- 有可能模拟器不支持这个字符集转换,建议到真机上运行一下看看.
补充:移动开发 , Symbian