char* __stdcall UnicodeToUtf8( const WCHAR* wstr )
{
const WCHAR* w;
// Convert unicode to utf8
int len = 0;
for ( w = wstr; *w; w++ ) {
if ( *w < 0×0080 ) len++;
else if ( *w < 0×0800 ) len += 2;
else len += 3;
}
unsigned char* szOut = ( unsigned char* )malloc( len+1 );
if ( szOut == NULL )
return NULL;
int i = 0;
for ( w = wstr; *w; w++ ) {
if ( *w < 0×0080 )
szOut[i++] = ( unsigned char ) *w;
else if ( *w < 0×0800 ) {
szOut[i++] = 0xc0 | (( *w ) >> 6 );
szOut[i++] = 0×80 | (( *w ) & 0×3f );
}
else {
szOut[i++] = 0xe0 | (( *w ) >> 12 );
szOut[i++] = 0×80 | (( ( *w ) >> 6 ) & 0×3f );
szOut[i++] = 0×80 | (( *w ) & 0×3f );
}
}
szOut[ i ] = ‘‘;
return ( char* )szOut;
}