UTF8 报表换行 UTF8转UNICODE
取得UTF-8数据(有中文,英文,数字,各种标点) 现在我手绘报表需要换行,我的想法是UTF8转UNICODE,然后按偶数取,再转回UTF-8 。
char * tmPtr =tmp; int i,j,k,len; len = strlen(tmPtr); wchar_t* result = (wchar_t*)malloc(sizeof(wchar_t)*len); memset(result ,0, sizeof(wchar_t)*len); if (result) { k = 0; for (i=0;i<len;) { if (0 == (0x80 & tmPtr[i])) {//one byte result[k++] = (wchar_t)tmPtr[i++]; continue; } if (0xe0 == (0xe0 & tmPtr[i])) {//three byte result[k] = (tmPtr[i] & 0x1F) << 12; result[k] |= (tmPtr[i+1] & 0x3F) << 6; result[k++] |= (tmPtr[i+2] & 0x3F); i += 3; continue; } if (0xc0 == (0xc0 & tmp[i])) {//two byte result[k] = (tmp[i] & 0x1F) << 8; result[k++] |= (tmp[i+1] & 0x3F); i += 2; } } result[k++] = 0; } len = wcslen(result); g_print("\nlen=%d\n",len); char* result1 = (char*)malloc(sizeof(char)*len*3); memset(result1 ,0, sizeof(char)*len*3); if (NULL != result1) { k = 0; for (i=0,j=0;i<=len;i++,j++) { if (0x80 > result[i]) { result1[k++] = (char)result[i]; } else { result1[k++] = (char)(0xe0|(result[i]>>12)); result1[k++] = (char)(0x80|((result[i]>>6)&0x3f)); result1[k++] = (char)(0x80|(result[i]&0x3f)); }
int utf8tounicode(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen) { iconv_t cd; if( (cd = iconv_open("UNICODE","utf-8")) ==0 ) return -1; memset(destbuf,0,destlen); const char **source = &sourcebuf; char **dest = &destbuf; if(-1 == iconv(cd,source,&sourcelen,dest,&destlen)) return -1; iconv_close(cd); return 0; }