1.
      char* __stdcall UnicodeToUtf8( const WCHAR* wstr )
   2.
      {
   3.
          const WCHAR* w;
   4.
       
   5.
          // Convert unicode to utf8
   6.
          int len = 0;
   7.
          for ( w = wstr; *w; w++ ) {
   8.
              if ( *w < 0×0080 ) len++;
   9.
              else if ( *w < 0×0800 ) len += 2;
  10.
              else len += 3;
  11.
          }
  12.
       
  13.
          unsigned char* szOut = ( unsigned char* )malloc( len+1 );
  14.
          if ( szOut == NULL )
  15.
              return NULL;
  16.
       
  17.
          int i = 0;
  18.
          for ( w = wstr; *w; w++ ) {
  19.
              if ( *w < 0×0080 )
  20.
                  szOut[i++] = ( unsigned char ) *w;
  21.
              else if ( *w < 0×0800 ) {
  22.
                  szOut[i++] = 0xc0 | (( *w ) >> 6 );
  23.
                  szOut[i++] = 0×80 | (( *w ) & 0×3f );
  24.
              }
  25.
              else {
  26.
                  szOut[i++] = 0xe0 | (( *w ) >> 12 );
  27.
                  szOut[i++] = 0×80 | (( ( *w ) >> 6 ) & 0×3f );
  28.
                  szOut[i++] = 0×80 | (( *w ) & 0×3f );
  29.
              } }
  30.
       
  31.
          szOut[ i ] = ‘\0‘;
  32.
          return ( char* )szOut;
  33.
      }