S60平台简体汉字处理浅谈
2010-07-21 04:21:00 来源:WEB开发网核心提示:HBufC8::NewLC( StreamData->Length() ); StreamData8->Des().Copy(*StreamData); TPtrC8 point8( *StreamData8 ); CCnvCharacterSetConverter* characterSetConvert
HBufC8::NewLC( StreamData->Length() );
StreamData8->Des().Copy(*StreamData); TPtrC8 point8( *StreamData8 );
CCnvCharacterSetConverter*
characterSetConverter=CCnvCharacterSetConverter::NewLC(); if(
converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
iEikonEnv->FsSession()) == CCnvCharacterSetConverter::EAvailable ) { } else
if (
characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312,
iEikonEnv->FsSession())!= CCnvCharacterSetConverter::EAvailable ) {
CleanupStack::PopAndDestroy(); User::Leave( KErrNotSupported ); } TInt
state=CCnvCharacterSetConverter::KStateDefault; HBufC* UnicodeString =
HBufC::NewL( point8 ); TPtr16 point16 = UnicodeString->Des(); if(
CCnvCharacterSetConverter::EErrorIllFormedInput ==
characterSetConverter->ConvertToUnicode(point16, point8, state ) ) {
CleanupStack::PopAndDestroy(); User::Leave(KErrArgument); }
CleanupStack::PopAndDestroy(6); //file StreamReadFromFile StreamData StreamData8
characterSetConverter UnicodeString FileServerSession.Close();
得到的UnicodeString可以通过:
CAknInformationNote* InfoNote; InfoNote = new ( ELeave ) CAknInformationNote; InfoNote->ExecuteLD( *UnicodeString );
加以显示验证。
以上代码的集成开发环境为:
Active Perl 5.6.1 build 631
Java Runtime Enviroment v1.5.0_07
CodeWarrior Personal Edition 3.1
S60 3RD EDITION SDK FOR SYMBIAN OS, FOR C++
在以命令行建立的应用中验证正常(WINSCW、GCCE)。如果是其它的建立应用方式或IDE可能需要做相应的变化,或根本不可行,在这里只是给大家提供一种思路和方法。
总之,简体汉字的处理,最重要的在于对字符编码的掌握,说到底就是要依据不同的编码情况进行相应的编码转换操作。最为理想和不受开发环境影响的方法个人认为是:资源文件法,也就是将字符串以UTF-8编码保存在资源源文件中,并设置以UTF-8编码去处理。它最为简便,也最为有效,且便于本地化的移植。其它方法只是提供一种参考,一个可行的方案。
更多精彩
赞助商链接