MFC多字节字符集环境下字符截取解决方法

来源:互联网 发布:上古卷轴rm捏脸数据 编辑:程序博客网 时间:2024/05/21 14:50

MFC多字节字符集环境下字符截取解决方法

  • 多字节字符集
    每个字符的编码宽度都不等,可以是一个或多个字节。 ASCII字符只占用一个字节。 对于中文,日文等象形字,由于其数量庞大,一个字节无法全部容纳。所以用两个字节来表示一个字符。

  • 多字节字符集环境下pdf输出汉字有时会出现乱码,当问题出在一行的最后一个汉字时,如何保证一个汉字截取完整就很重要。下面用两个方法来解决这个问题。


举例

多字节字符集环境下将编辑框的汉字,标点,英文等混合的一个段落,输出到pdf文档里,格式为每行30个(汉字、标点、英文均计一个)

  • 两种方法(详见代码块示例)

代码块

方法一:判断每行非汉字个数

int eachline=60; //每行60 个字符int num=0; //非汉字个数CString strline; //每行输出的内容PDF *p=NULL; byte *buff=new [m_edit.GetLength()]; //m_edit为编辑框的成员变量memcpy(buff,m_edit.GetBuffer(),m_edit.GetLength()); //将编辑框内容复制到byte类型的数组bufffor(int i=0;i<m_edit.GetLength();i+=eachline){       temp+=eachline;    for(int j=i;j<temp;j++)        if(buff[j]<128) //为真即非汉字            num++;    strline=m_edit.Mid(i,eachline);    if(num%2) //一行中非汉字个数为奇数    {        strline=m_edit.Mid(i,eachline-1); //保证汉字截取完整,不会乱码    }    PDF_continue_text(p,strline); //输出到pdf文档}

方法二:判断每个字符是否为汉字

CString str=""; int num=0;for(int i=0;i<m_edit.GetLength();i++){    num++;    if(m_edit[i]&0x80) //相与为真说明是汉字      {        str+=m_edit[i];        str+=m_edit[i+1];           i++;    }    else        str+=m_edit[i];    if(num==30)    {        PDF_continue_text(p,str);        num=0;        str="";    }}

注:以上方法有可能输出的文字有可能不会严格对齐,具体看使用pdf的何种字体。

阅读全文
0 0
原创粉丝点击