View a printable version of the current page.
  Wiki > Symbian Developer Network Public Wiki > ... > Example source code > UTF converter
  UTF converter
Added by alie, last edited by rodders on Feb 15, 2008  (view change)
Labels: 
(None)

Header file

#ifndef __UTFCONVERTER_H__
#define __UTFCONVERTER_H__

#include <e32def.h>
#include <e32base.h>

class CDesCArray16;

class CUTFConverter
	{
	public :
		static void ConvertFromUnicodeToUtf8L(CBufSeg *aUtf8,const TDesC16 &aUnicode);
		static void ConvertFromUtf8ToUnicodeL(TDes16& aUnicode,CBufSeg* aUtf8);

	};

#endif

CPP File

#include <utf.h>

#include "UTFConverter.h"

void CUTFConverter::ConvertFromUnicodeToUtf8L(CBufSeg *aUtf8,const TDesC16 &aUnicode)
    {
    TInt retVal=KErrNone;
    HBufC *uniText=HBufC16::NewLC(aUnicode.Length());
    *uniText=aUnicode;
    TPtr ptrUniText=uniText->Des();

    TBuf8<20> outBuf;
    TInt convValue=0;
    for(;;)
        {
        convValue=CnvUtfConverter::ConvertFromUnicodeToUtf8(outBuf,ptrUniText);
        if(convValue==CnvUtfConverter::EErrorIllFormedInput)
            {
            retVal=KErrCorrupt;
            break;
            }
        else if(convValue<0)
            {
            retVal=KErrGeneral;
            break;
            }
        aUtf8->InsertL(aUtf8->Size(),outBuf);
        if(convValue==0)
            break;
        ptrUniText.Delete(0,ptrUniText.Length()-convValue);
        }
    CleanupStack::PopAndDestroy();
    if(retVal!=KErrNone)
        User::Leave(retVal);
    }

void CUTFConverter::ConvertFromUtf8ToUnicodeL(TDes16& aUnicode,CBufSeg* aUtf8)
    {
    TBuf16<128> outBuffer;
    HBufC8* utf8BufC=HBufC8::NewLC(aUtf8->Size());
    TPtr8 utf8Ptr=utf8BufC->Des();
    aUtf8->Read(0,utf8Ptr,aUtf8->Size());
    TPtrC8 remainderOfUtf8(*utf8BufC);
    TInt leaveCode=KErrNone;
    for(;;)
        {
        const TInt returnValue=CnvUtfConverter::ConvertToUnicodeFromUtf8(outBuffer,remainderOfUtf8);
        if(returnValue==CnvUtfConverter::EErrorIllFormedInput)
            {
            leaveCode=KErrCorrupt;
            break;
            }
        else if(returnValue<0)
            {
            leaveCode=KErrGeneral;
            break;
            }
        aUnicode.Append(outBuffer);
        if(returnValue==0)
            break;
        remainderOfUtf8.Set(remainderOfUtf8.Right(returnValue));
        }
    CleanupStack::PopAndDestroy();
    if(leaveCode!=KErrNone)
        User::Leave(leaveCode);
    }
Interactive Services Terms & Conditions of use | Terms of use | Privacy policy | Media Center | Contact us | © 2008 Symbian