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