当一个字符串中是汉英混编时,如果截断字符串时恰巧遇到将一个汉字(通常一个汉字占两个字节)一切为二的情况,那么输出时就会在字符串的尾部出现乱码。在网上乱差一顿,主要思想就是汉字占两个字节,unicode编码,多字符编码等等。一个省事的解决方式就是:不要出现破字现象。
这里是以string为例,如果是其他字符串的话,比如CString,只要有类似于
这里以string,取前32个字符为例:
如果发现第32个是汉字的高字节干脆就不取了。如何判断是不是汉字的高字节呢?与0x80相比
int iCount = cstrClientName.size();
if(iCount > CONST_USERINFO_MAX)
{
if ((BYTE)cstrClientName.at(31) < 0x80) //不是汉字高位
{
cstrClientName = cstrClientName.substr(0,32);
}
else
{
cstrClientName = cstrClientName.substr(0,31);
}
}
这里是以string为例,如果是其他字符串的话,比如CString,只要有类似于
cstrClientName.at(31)
的函数应用能取得字符值就ok了