用下面的函数解决吧:
1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
2. 如何对DBCS(双字节字符集)字符串进行操作?
函数 描述
PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址
PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 返回字符串中上一个字符的地址
BOOL IsDBCSLeadByte( BYTE ); 如果该字节是DBCS字符的第一个字节,则返回非0值
6. 如何对Unicode进行操作?
字符集 特性 实例
ANSI 操作函数以str开头 strcpy
Unicode 操作函数以wcs开头 wcscpy
MBCS 操作函数以_mbs开头 _mbscpy
ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)
7. 如何表示Unicode字符串常量?
字符集 实例
ANSI “string”
Unicode L“string”
ANSI/Unicode T(“string”)或_TEXT(“string”)if( szError[0] == _TEXT(‘J’) ){ }
12. 如何判断一段字符串是ANSI还是Unicode?
用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此 IsTextUnicode有可能返回不正确的结果。
13. 如何在Unicode与ANSI之间转换字符串?
Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。

解决方案 »

  1.   

    我写出来了,拿出来与大家共享,分将给予答案最接近者。
    char ch[] ="一种名为Gokar的群发邮件蠕虫病毒开始在网上蔓延,这种病毒的全名是“W32.Gokar.A@mm”,主要以电子邮件附件的形式传播,邮件主题与正文的组合多达近30种,";
    wchar_t wch[1024]; 
    wchar_t wch2[5];
    char chDest[16];
    int i;
    CString str;
    int iLenC = strlen(ch);
    ::MultiByteToWideChar(CP_ACP, 0, ch, -1, wch, 1024);
    int iLenW = wcslen(wch); int iPages = iLenW / 5 + 1; for ( i= 1;i <= iPages;i++ ) {
    ZeroMemory(wch2,sizeof(wch2));
    ZeroMemory(chDest,sizeof(chDest));
    str.AllocSysString ();
    wch2[0] = wch [(i - 1) * 5];
    wch2[1] = wch [(i - 1) * 5 + 1];
    wch2[2] = wch [(i - 1) * 5 + 2];
    wch2[3] = wch [(i - 1) * 5 + 3];
    wch2[4] = wch [(i - 1) * 5 + 4];
    WideCharToMultiByte( CP_ACP, 0, wch2, 5,chDest, 16, NULL, NULL );
    str = chDest;
    }