rendered paste bodyint utf16toutf8(unsigned short* src, unsigned char* dest, int srclen) { unsigned char* orgdest = dest; for(i = 0; i < srclen; ++i, ++src) { if(*src < 0x80) { *dest++ = (unsigned char)*src; } else if(*src < 0x800) { *dest++ = 0xc0 | (unsigned char)(*src >> 6); *dest++ = 0x80 | (unsigned char)(*src & 0x3f); } else if((*src & fc00) == 0xd800 || *src > 0xffff) { int code = *src; if(code < 0x10000) { if((src[1] & 0xfc00) != 0xdc00) { /* error */ } code = ((code & 0x3ff) << 10) | (*++src & 0x3ff); } *dest++ = 0xf0 | (unsigned char)(*src >> 18); *dest++ = 0x80 | (unsigned char)((*src >> 12) & 0x3f); *dest++ = 0x80 | (unsigned char)((*src >> 6) & 0x3f); *dest++ = 0x80 | (unsigned char)(*src & 0x3f); } else { *dest++ = 0xe0 | (unsigned char)(*src >> 12); *dest++ = 0x80 | (unsigned char)((*src >> 6) & 0x3f); *dest++ = 0x80 | (unsigned char)(*src & 0x3f); } } return orgdest - dest;}