Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. ANSI to UTF8 (dynamic mem alloc?)

ANSI to UTF8 (dynamic mem alloc?)

Scheduled Pinned Locked Moved C / C++ / MFC
questionperformance
3 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Souldrift
    wrote on last edited by
    #1

    Good morning :), got a question to the following code piece which converts ansi text to UTF8.

    void SynthesizerSvox::ANSI2UTF8( char* text, int size, char*& result )
    {
    const int SIZE = 10240;

    if( result ) 
    {
    	delete \[\] result;
    }
    result = new char\[SIZE\];
    
    WCHAR w\[SIZE\]={0};
    int erg=0;
    
    erg=MultiByteToWideChar(CP\_ACP, 0, text, -1, w, SIZE / sizeof(WCHAR));	// ANSI to UNICODE
    erg=WideCharToMultiByte(CP\_UTF8, 0, w, -1, result, SIZE, 0, 0);		// UNICODE to UTF-8
    

    }

    I found the code somewhere on the net (thanks!) and it works nicely. Only I´d like to work with dynamic memory allocation (don´t like to limit it) and can´t seem to get it done. The number of bytes used per character vary in UTF8 character set. Is there a solution to this? Souldrift

    C 1 Reply Last reply
    0
    • S Souldrift

      Good morning :), got a question to the following code piece which converts ansi text to UTF8.

      void SynthesizerSvox::ANSI2UTF8( char* text, int size, char*& result )
      {
      const int SIZE = 10240;

      if( result ) 
      {
      	delete \[\] result;
      }
      result = new char\[SIZE\];
      
      WCHAR w\[SIZE\]={0};
      int erg=0;
      
      erg=MultiByteToWideChar(CP\_ACP, 0, text, -1, w, SIZE / sizeof(WCHAR));	// ANSI to UNICODE
      erg=WideCharToMultiByte(CP\_UTF8, 0, w, -1, result, SIZE, 0, 0);		// UNICODE to UTF-8
      

      }

      I found the code somewhere on the net (thanks!) and it works nicely. Only I´d like to work with dynamic memory allocation (don´t like to limit it) and can´t seem to get it done. The number of bytes used per character vary in UTF8 character set. Is there a solution to this? Souldrift

      C Offline
      C Offline
      CPallini
      wrote on last edited by
      #2

      Souldrift wrote:

      nd can´t seem to get it done.

      Why?

      Souldrift wrote:

      The number of bytes used per character vary in UTF8 character set.

      Yes, but WideCharToMultiByte is able to tell you how many bytes are required (MSDN [^]):

      cbMultiByte [in] Size, in bytes, of the buffer indicated by lpMultiByteStr. If this parameter is set to 0, the function returns the required buffer size for lpMultiByteStr and makes no use of the output parameter itself.

      :)

      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
      [My articles]

      S 1 Reply Last reply
      0
      • C CPallini

        Souldrift wrote:

        nd can´t seem to get it done.

        Why?

        Souldrift wrote:

        The number of bytes used per character vary in UTF8 character set.

        Yes, but WideCharToMultiByte is able to tell you how many bytes are required (MSDN [^]):

        cbMultiByte [in] Size, in bytes, of the buffer indicated by lpMultiByteStr. If this parameter is set to 0, the function returns the required buffer size for lpMultiByteStr and makes no use of the output parameter itself.

        :)

        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
        [My articles]

        S Offline
        S Offline
        Souldrift
        wrote on last edited by
        #3

        Hm, good point. Thanks for reminding me of my ability to read ... it worked ;). Cheers Souldrift

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • World
        • Users
        • Groups