iconv的问题
[code=C/C++][/code]
char charset[16] = {0};// =?UTF-8?B?5o6i57Si56We5puy6ZqQ6JeP5Zyo6IOM5ZCO55qE56eY5a+G?=bool decode_subject(char *subject){ static char *iconvob = NULL; static iconv_t cd = (iconv_t)-1; char *p1, *p2; size_t insz, outsz; if(!strstr(subject, "=?")) return true; p1 = strchr(subject + 2, '?'); memcpy(charset, subject + 2, p1 - subject - 2); charset[p1 - subject - 2] = 0;#ifdef DEBUG fprintf(stderr, "charset: %s\n", charset);#endif p1 += 3; p2 = strrchr(p1, '?'); if(cd == (iconv_t)-1) { cd = iconv_open("UTF-8", charset); if(cd == (iconv_t)-1) { perror("iconv_open()"); return false; } } if(!iconvob) { iconvob = (char *)malloc(256); if(!iconvob) { fprintf(stderr, "malloc() failed\n"); return false; } } memset(iconvob, 0, 256); insz = p2 - p1; if(iconv(cd, &p1, &insz, &iconvob, &outsz) == (size_t)-1) { iconv_close(cd); perror("iconv()"); return false; } strcpy(subject, iconvob); return true;}