Symbian S60 平台简体汉字处理浅谈
2010-02-25 04:37:00 来源:WEB开发网}
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编码去处理。它最为简便,也最为有效,且便于本地化的移植。其它方法只是提供一种参考,一个可行的方案。
其实,本文所讨论的方法不仅仅对简体汉字有效,理论上对所有非ANSII标准字符都适用。
补记:字节序标记(Byte Order Mark)
BOM(Byte Order Mark),是在Unicode标准(UTF-16)引入后,对于Unicode纯文本文件判断其比特顺序的标记,在UTF-16 Little Endian字节序下为(0xFF,0xFE),在UTF-16 Big Endian下为(0xFE,0xFF);如果进行相应的UTF-16到UTF-8转换,该处两个字节会被处理成为三个字节的UTF-8编码字节序标记。
更多精彩
赞助商链接