diff -r 48780e181b38 -r 578be2adaf3e Symbian3/PDK/Source/GUID-86086CA3-9A2E-4024-BE80-1763614A5079.dita --- a/Symbian3/PDK/Source/GUID-86086CA3-9A2E-4024-BE80-1763614A5079.dita Tue Jul 20 12:00:49 2010 +0100 +++ b/Symbian3/PDK/Source/GUID-86086CA3-9A2E-4024-BE80-1763614A5079.dita Fri Aug 13 16:47:46 2010 +0100 @@ -1,127 +1,127 @@ - - - - - -Character -Conversion in Symbian C++ and GNU CSymbian C++ supports character conversion between Unicode and other -native character sets. -

GNU C supports character conversion:

-

The following example illustrates the steps to be followed to convert from -one native character set to another native character set. In GNU C it is straightforward. -In Symbian C++ more lines of code are needed to do the same work. The example -converts a string from the ISO-8859-1 character set to the ISO-8859-2 -character set.

-

GNU C

-#include <iconv.h> -#include <stddef.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -int main (void) -{ - iconv_t cd; - const char *inbuf = "abcd"; - char *outbuf = NULL;; - size_t inbytes,outbytes; - cd = iconv_open ("ISO-8859-2", "ISO-8859-1"); - if (cd == (iconv_t) -1) - { - printf ("iconv_open failed errno = %d\n",errno); - iconv_close(cd); - return 1; - } - outbuf = (char*) malloc(4); - inbytes = outbytes = 4 ; - iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes); - if (iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes) == (size_t) -1) - printf(" errno = %d \n",errno); - else - printf("Iconv passed\n"); - iconv_close (cd); - return 1; -} - -

SYMBIAN C++

- -#include <e32base.h> -#include <e32cons.h> -#include <charconv.h> -#include <f32file.h> -#include <string.h> -#include <stdlib.h> - -LIT8(KNativeText, "abcd"); -LOCAL_C int doExampleL() -{ - char *inbuf = "abcd"; - char *outbuf = NULL; - int inbytes,outbytes; - inbytes = outbytes = 4; - - TInt retVal = KErrNone; - outbuf = (char*) malloc(outbytes); - RFs fileSession; - User::LeaveIfError(fileSession.Connect()); - CleanupClosePushL(fileSession); - - //Allocates and constructs a CCnvCharacterSetConverter object - CnvCharacterSetConverter* conv = CCnvCharacterSetConverter::NewLC() ; - TPtrC8 remainderOfForeignText((const TText8*) inbuf,inbytes); - TBuf16<256> UnicodeText; - TBuf8<256> outputBuffer; - TInt numberOfUnconvertibleCharacters = 0; - TInt indexOfFirstByteOfFirstUnconvertibleCharacter = 0; - //Specifies the character set(ISO-8859-1) to convert to UNICODE - CCnvCharacterSetConverter::TAvailability avail = conv->PrepareToConvertToOrFromL (KCharacterSetIdentifierIso88591, fileSession); - if(CCnvCharacterSetConverter::ENotAvailable == avail) - { - CleanupStack::PopAndDestroy(2); //conv, fileSession - return KErrGeneral; - } - //Convert text encoded in the ISO-8859-1 character set into the Unicode character set (UCS-2). - retVal = conv->ConvertToUnicode(UnicodeText, remainderOfForeignText, numberOfUnconvertibleCharacters, indexOfFirstByteOfFirstUnconvertibleCharacter); - if(retVal < 0 && (retVal != CCnvCharacterSetConverter::EErrorIllFormedInput)) - { - CleanupStack::PopAndDestroy(2); //conv, fileSession - return retVal; - } - //Specifies the character set(ISO-8859-2) to convert from UNICODE - avail = conv->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88592, fileSession); - if(CCnvCharacterSetConverter::ENotAvailable == avail) - { - CleanupStack::PopAndDestroy(2); //conv, fileSession - return KErrGeneral; - } - //Convert text encoded in the Unicode character set (UCS-2) to ISO-8859-2 - retVal = conv->ConvertFromUnicode(outputBuffer,UnicodeText, numberOfUnconvertibleCharacters, indexOfFirstByteOfFirstUnconvertibleCharacter); - if(retVal < 0 && (retVal != CCnvCharacterSetConverter::EErrorIllFormedInput)) - { - CleanupStack::PopAndDestroy(2); //conv, fileSession - return retVal; - } - TInt outputbufferLength = outputBuffer.Length(); - strncpy(outbuf, (const char*) outputBuffer.Ptr(),outputbufferLength); - outbuf = outbuf + outputbufferLength; - CleanupStack::PopAndDestroy(2); //conv, fileSession - return retVal; -} - + + + + + +Character +Conversion in Symbian C++ and GNU CSymbian C++ supports character conversion between Unicode and other +native character sets. +

GNU C supports character conversion:

    +
  • between Unicode and other native character sets

  • +
  • from a native character set to another native character set.

  • +

+

The following example illustrates the steps to be followed to convert from +one native character set to another native character set. In GNU C it is straightforward. +In Symbian C++ more lines of code are needed to do the same work. The example +converts a string from the ISO-8859-1 character set to the ISO-8859-2 +character set.

+

GNU C

+#include <iconv.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> + +int main (void) +{ + iconv_t cd; + const char *inbuf = "abcd"; + char *outbuf = NULL;; + size_t inbytes,outbytes; + cd = iconv_open ("ISO-8859-2", "ISO-8859-1"); + if (cd == (iconv_t) -1) + { + printf ("iconv_open failed errno = %d\n",errno); + iconv_close(cd); + return 1; + } + outbuf = (char*) malloc(4); + inbytes = outbytes = 4 ; + iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes); + if (iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes) == (size_t) -1) + printf(" errno = %d \n",errno); + else + printf("Iconv passed\n"); + iconv_close (cd); + return 1; +} + +

SYMBIAN C++

+
    +
  • Specify the non-Unicode character set being converted to Unicode. In +this case it is ISO-8859-1.

  • +
  • Convert the text from the native character set to Unicode.

  • +
  • Specify the non-Unicode character set being converted from Unicode. +In this case it is ISO-8859-2

  • +
  • Convert the text from Unicode to the native character set

  • +
+#include <e32base.h> +#include <e32cons.h> +#include <charconv.h> +#include <f32file.h> +#include <string.h> +#include <stdlib.h> + +LIT8(KNativeText, "abcd"); +LOCAL_C int doExampleL() +{ + char *inbuf = "abcd"; + char *outbuf = NULL; + int inbytes,outbytes; + inbytes = outbytes = 4; + + TInt retVal = KErrNone; + outbuf = (char*) malloc(outbytes); + RFs fileSession; + User::LeaveIfError(fileSession.Connect()); + CleanupClosePushL(fileSession); + + //Allocates and constructs a CCnvCharacterSetConverter object + CnvCharacterSetConverter* conv = CCnvCharacterSetConverter::NewLC() ; + TPtrC8 remainderOfForeignText((const TText8*) inbuf,inbytes); + TBuf16<256> UnicodeText; + TBuf8<256> outputBuffer; + TInt numberOfUnconvertibleCharacters = 0; + TInt indexOfFirstByteOfFirstUnconvertibleCharacter = 0; + //Specifies the character set(ISO-8859-1) to convert to UNICODE + CCnvCharacterSetConverter::TAvailability avail = conv->PrepareToConvertToOrFromL (KCharacterSetIdentifierIso88591, fileSession); + if(CCnvCharacterSetConverter::ENotAvailable == avail) + { + CleanupStack::PopAndDestroy(2); //conv, fileSession + return KErrGeneral; + } + //Convert text encoded in the ISO-8859-1 character set into the Unicode character set (UCS-2). + retVal = conv->ConvertToUnicode(UnicodeText, remainderOfForeignText, numberOfUnconvertibleCharacters, indexOfFirstByteOfFirstUnconvertibleCharacter); + if(retVal < 0 && (retVal != CCnvCharacterSetConverter::EErrorIllFormedInput)) + { + CleanupStack::PopAndDestroy(2); //conv, fileSession + return retVal; + } + //Specifies the character set(ISO-8859-2) to convert from UNICODE + avail = conv->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88592, fileSession); + if(CCnvCharacterSetConverter::ENotAvailable == avail) + { + CleanupStack::PopAndDestroy(2); //conv, fileSession + return KErrGeneral; + } + //Convert text encoded in the Unicode character set (UCS-2) to ISO-8859-2 + retVal = conv->ConvertFromUnicode(outputBuffer,UnicodeText, numberOfUnconvertibleCharacters, indexOfFirstByteOfFirstUnconvertibleCharacter); + if(retVal < 0 && (retVal != CCnvCharacterSetConverter::EErrorIllFormedInput)) + { + CleanupStack::PopAndDestroy(2); //conv, fileSession + return retVal; + } + TInt outputbufferLength = outputBuffer.Length(); + strncpy(outbuf, (const char*) outputBuffer.Ptr(),outputbufferLength); + outbuf = outbuf + outputbufferLength; + CleanupStack::PopAndDestroy(2); //conv, fileSession + return retVal; +} +
\ No newline at end of file