UTF8编码字符串截取
对采用UTF8编码的字符进行截取.指定起始字符和终止字符,把相应的UTF8编码串复制到缓冲区中.
/*
* text:采用UTF8编码存储的字符串.
* s:截取时的起始字符,从0开始.
* e:截取的字符数.为10则截取10个字符.
* buffer:存储截取的字符串
*/
int StringUTF8Crop(const char* text,const int s,const int e,char* buffer){ int i=0,count=0; int k=0; char ch; while(count<s&&text[i]){ count++; ch=text[i]; if(ch&0x80){ while(ch&0x80){ ch<<=1; i++; } } else i++; } while(count<s+e&&text[i]){ count++; ch=text[i]; if(ch&0x80){ while(ch&0x80){ ch<<=1; buffer[k++]=text[i++]; } } else{ buffer[k++]=text[i++]; } } return k; }
int main(int args,char* argv[]){ HANDLE x; HANDLE y; HANDLE z; char* text="一二三四五六七八九十2"; char buffer[100]={0}; StringUTF8Crop(text,1,10,buffer); printf("buffer :%s\n",buffer); return 0; }
输出结果 :
二三四五六七八九十2
注意:
windows下会显示乱码.原因是windows控制台默认是gbk编码.需要更改代码页为65001并且还要更改字体.