RFileWriteStream 写入汉字
由于用到 RFileWriteStream 写入汉字到文件中,之前没有处理过,等写入文件后才发现是乱码。
问了问群里的朋友也没有解决,后来就上网搜,终于找到一个解决方法,就是用 CCnvCharacterSetConverter 类
这个类是用来转换Unicode 与其它编码的,symbian 用的是 unicode 编码,转成汉字,只需把 unicode 转为 gbk
就可以了,别的不说了,看代码吧,很简单的
HBufC8* tmpName;
CCnvCharacterSetConverter* conv = CCnvCharacterSetConverter::NewLC();
for(TInt i=0;i<sels->Count();i++)
{
TPtrC pId = (*this->iIdList)[i];
TPtrC pName = (*this->iNameList)[i];
TPtrC pPhone = (*this->iPhoneList)[i];
if (conv->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
this->iEikon->FsSession()) !=CCnvCharacterSetConverter::EAvailable )
{
User::Leave(KErrNotSupported);
}
// 这里多加了2个的长度,如果不添加上,试验时发现少一个汉字
tmpName = HBufC8::NewLC(pName.Length()+2);
TPtr8 pTmpName = tmpName->Des();
conv->ConvertFromUnicode(pTmpName,pName);
CXmlNode* aNode = node->AddChildNote(bufPhone);
CXmlNode* idNode = aNode->AddChildNote(bufId);
idNode->SetValue(pId);
CXmlNode* nameNode = aNode->AddChildNote(bufName);
nameNode->SetValue(pTmpName); // 写入 gbk 编码
CXmlNode* numNode = aNode->AddChildNote(bufNum);
numNode->SetValue(pPhone);
CleanupStack::PopAndDestroy();
}
CleanupStack::PopAndDestroy();
doc->SaveToFileL();
这里是主要的代码,红色标出是用到的转换
安平2009@原创
qi_jianzhou@126.com