定义了一个字符串,其中可能有汉字或英文字母、标点,我在是中间某个位置插入了一个回车符,显示出来成了乱码,不知道怎么处理了。插入的位置用IsDBCSLeadByte函数判断了,如果为真则位置加1可还是不行。

解决方案 »

  1.   

    可以先把字符串转为widechar的格式
      

  2.   

    n = 72;
    if(m_StructProject.strContent.GetLength() > n)
    {
    strTemp2 = "";
    while(i < m_StructProject.strContent.GetLength())
    {
        if(i + n > m_StructProject.strContent.GetLength())
    break;
    //若是双字节的头一个字节则要另外处理
    TCHAR Is = m_StructProject.strContent.GetAt(i + n);
    if(::IsDBCSLeadByte(Is))
    {
    strTemp1 = m_StructProject.strContent.Mid(i,n + 1); i += 1;
    MessageBox(strTemp1);
    strTemp2 += strTemp1 + " \n";
    }
    else
    {
    strTemp1 = m_StructProject.strContent.Mid(i,n);
    strTemp2 += strTemp1 + "\n";
    }
    i += n;
    }
    一段源码
      

  3.   

    楼上给举个例子,但我最后还用CDC的DrawText()函数输出了字符串.
      

  4.   

    strTemp1 = m_StructProject.strContent.Mid(i,n + 1);
    这一句可能把一个汉字拆开了因为你判断的是i+n
    TCHAR Is = m_StructProject.strContent.GetAt(i + n);
    if(::IsDBCSLeadByte(Is))
      

  5.   

    我的思路是这样的,当i + n的位置是一个双字节的头一个时,则读出的临时字符串长度是从i 开始的n + 1个,保证双字节的完整性,反之长度是n
      

  6.   

    把 \n 换成 \r\n 试一试
      

  7.   

    flyelf(空谷清音[MVP]) ( ) 信誉:150  2006-6-14 16:02:02  得分: 0  
    可以先把字符串转为widechar的格式同意,先全部统一转成宽字符串,再插入回车处理,然后是否转成单字节或多字节或着不转根据需要.lz还是玩五笔的哦,回车的回字打成加了,看来是真的着急了^_^