首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

UTF8 报表换行 UTF8转UNICODE解决方法

2012-04-25 
UTF8 报表换行UTF8转UNICODE取得UTF-8数据(有中文,英文,数字,各种标点) 现在我手绘报表需要换行,我的想法

UTF8 报表换行 UTF8转UNICODE
取得UTF-8数据(有中文,英文,数字,各种标点) 现在我手绘报表需要换行,我的想法是UTF8转UNICODE,然后按偶数取,再转回UTF-8 。

 

C/C++ code
  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));                                                                  } 



这个转换代码,偶尔会出现乱码的问题。而且转换后也非偶数。所以无法使用了。
我就换了 iconv函数 

 
C/C++ code
    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;          } 



这个返回-1.无法转换,不知道是哪的问题,还是ICONV 不支持直接从UTF8 到UNICODE ??

麻烦大家看下,如果有其它UTF8 换行的方法就更好了啊。(最好是,单字分割出来的,这样,我就可以控制字符串像素长度换行了。)

[解决办法]
探讨

引用:
话说 UTF-8数据(有中文,英文,数字,各种标点) 这些就算转成ucs2/ucs4后,和按像素宽度换行有什么关系?这个ucs的等宽又不是指像素等宽


主要是我要把UTF-8 按一定长度,换行 。UTF8 不是字节不固定嘛,不好分割,容易出现乱码,所以我想先转成UNICODE ,这个都是双字节,逢偶数切割,应该就没乱码了吧。

如果有更好的,直接分割UT……

热点排行