S60平台简体汉字处理浅谈
2010-07-21 04:21:00 来源:WEB开发网1).右键点击工程文件夹的某个资源源文件->properties->Info,将Text file ecoding改为others中的UTF-8;
2).右键点击工程文件夹->properties->Info,将Text file encoding改为others中的UTF-8。
两者取一即可,只是后一种将使工程所有源文件的文本编码方式变为UTF-8。另外需要注意,Carbide中一旦有文本编码方式的修改,特别是资源源文件,最好重新写入字串,清除(clean)之后再建立应用或运行(build或run),否则上一次的结果仍可能会存在而影响这一次的建立。
二.非UTF-8编码字串
如前所述,如果不以UTF-8编码保存程序源文件,则程序源文件(.cpp)中的字串即为非UTF-8 编码字串。要想正常操作,则必须进行编码转换,但不是转换为UTF-8编码,而是必须转换成Unicode(标准的Unicode也称UTF-16)编码。例如:
_LIT8( KNonUnicodeString, "简体汉字串"); TPtrC8 point8( KNonUnicodeString ); CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC(); //一般简体中文Windows使用的简体汉字编码是Gb2312或Gbk(ASCII字符集的扩展,也称ASCI字符集) 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(2); // characterSetConverter UnicodeString
UnicodeString即为Unicode编码的字串,可以直接用于显示及写文件等操作。简体汉字串的显示除了编码问题,还要注意字体的选择,特别是对UI控件,最好是用LatinBold12()(2版),AknLayoutUtils::FontFromId( ELatinBold12 )(3版)。简体汉字串显示的相关文档,例程很多,在这里就不多说了。至于文件中读写简体汉字串则要提几点注意:
更多精彩
赞助商链接