在用rsocket 发送中文字符串给tcp server的时候 server端接收到的字符串乱码。
参照http://blog.csdn.net/kaiming2008/archive/2008/12/04/3441559.aspx的symbian关于字符编码转换文章解决了。
添加头文件
#include <charconv.h> // for char set convert GBK - Unicode
在mmp里面添加
LIBRARY charconv.lib // for GBK to Unicode converter
这两步完成后,重新编译;
添加如下方法
/**
* Handle the selected event.
* @param aCommand the command id invoked
* @return ETrue if the command was handled, EFalse if not
*/
void CrailwayLoginListView::ConvUni2Gbk(TDesC& original, TDes8& res) {
TInt state=CCnvCharacterSetConverter::KStateDefault ;
CCnvCharacterSetConverter* iConv ;
iConv = CCnvCharacterSetConverter::NewLC();
if(iConv->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
iEikonEnv->FsSession())!=CCnvCharacterSetConverter::EAvailable)
User::Leave(KErrNotSupported);
iConv->ConvertFromUnicode(res, original, state) ;
CleanupStack::PopAndDestroy() ;
}
TBuf<100> Lmsg(l);
Lmsg.Append(si);
Lmsg.Append(Wname);
Lmsg.Append(si);
Lmsg.Append(WpassWord);
TBuf8<100> tmp;
ConvUni2Gbk(Lmsg,tmp);//经过转码之后 用sendLogin就不乱码了
pApp->iEngine->InitL();
pApp->iEngine->ConnectL();
pApp->iEngine->SendLogin(tmp);
socketEngine.cpp中定义如下方法
void CSocketEngine::SendLogin(TBuf8<100> msg)
{
TRequestStatus status(KRequestPending);
iSocket.Send(msg, 0, status);
User::WaitForRequest(status);
User::LeaveIfError(status.Int());
// 等待服务器端返回数据
//RecvInfoL();
// * */
}