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

posted @ 2010-07-12 17:22  zziss  阅读(282)  评论(0编辑  收藏  举报