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.
}