漢字截斷問題

//判斷漢字截斷
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
#pragma comment(lib,"user32.lib")

bool IsHanZiCorrupted( string &SeriesRecvString )
{
       DWORD len=strlen( SeriesRecvString.c_str() );
       DWORD i=0;
        while( i<len)
        {	
              
                if(  IsDBCSLeadByte( SeriesRecvString[i] ) )
                   {      
                        i+=2;
                        if( i> len )
                        {
                                 return true;
                        }
                }
                else
                {
                        ++i;
                }
        }
        return false;
}

int main ()
{
	//0x81:漢字內碼擴展規範(GBK) 1stByte :0x81~0xFE; 2ndByte:0x40~0x7E;
	//if( (unsigned char)SeriesRecvString[i]>=0x81 ) 必定要轉成無符號數才能正確比較
		
		string str("c鑯d苦e命f三g國h無i雙j楚k王l好m細n腰o宮p中q多r餓s死敵");

	 
		cout<<"str=\""<<str<<"\""<<endl;
		cout<<"len()="<<str.length()<<endl;
		cout<<"size()="<<str.size()<<endl;
		cout<<"strlen(c_str())="<<strlen( str.c_str() )<<endl<<endl;
		
		for(int i=0;i<str.length();++i)
		{
			printf("str[%d]:%02x",i,(unsigned char) str[i]);
			if( IsDBCSLeadByte(str[i]) )cout<<":DBCS ";
				else cout<<":"<<str[i];
			cout<<endl;
		} 
		IsHanZiCorrupted(str)?cout<<"IsHanZiCorrupt:yes"<<endl:cout<<"IsHanZiCorrupt:no"<<endl;
		cout<<endl;

		str[51]='a';
		for(int i=0;i<str.length();++i)
		{
			printf("str[%d]:%02x",i,(unsigned char) str[i]);
			if( IsDBCSLeadByte(str[i]) )cout<<":DBCS ";
				else cout<<":"<<str[i];
			cout<<endl;
		} 
		IsHanZiCorrupted(str)?cout<<"IsHanZiCorrupt:yes"<<endl:cout<<"IsHanZiCorrupt:no"<<endl;


} 
///////////////////
str="c鑯d苦e命f三g國h無i雙j楚k王l好m細n腰o宮p中q多r餓s死敵" len()=53 size()=53 strlen(c_str())=53 str[0]:63:c str[1]:e8:DBCS str[2]:7e:~ str[3]:64:d str[4]:bf:DBCS str[5]:e0:DBCS str[6]:65:e str[7]:c3:DBCS str[8]:fc:DBCS str[9]:66:f str[10]:c8:DBCS str[11]:fd:DBCS str[12]:67:g str[13]:b9:DBCS str[14]:fa:DBCS str[15]:68:h str[16]:ce:DBCS str[17]:de:DBCS str[18]:69:i str[19]:cb:DBCS str[20]:ab:DBCS str[21]:6a:j str[22]:b3:DBCS str[23]:fe:DBCS str[24]:6b:k str[25]:cd:DBCS str[26]:f5:DBCS str[27]:6c:l str[28]:ba:DBCS str[29]:c3:DBCS str[30]:6d:m str[31]:cf:DBCS str[32]:b8:DBCS str[33]:6e:n str[34]:d1:DBCS str[35]:fc:DBCS str[36]:6f:o str[37]:b9:DBCS str[38]:ac:DBCS str[39]:70:p str[40]:d6:DBCS str[41]:d0:DBCS str[42]:71:q str[43]:b6:DBCS str[44]:e0:DBCS str[45]:72:r str[46]:b6:DBCS str[47]:f6:DBCS str[48]:73:s str[49]:cb:DBCS str[50]:c0:DBCS str[51]:b5:DBCS str[52]:d0:DBCS IsHanZiCorrupt:no str[0]:63:c str[1]:e8:DBCS str[2]:7e:~ str[3]:64:d str[4]:bf:DBCS str[5]:e0:DBCS str[6]:65:e str[7]:c3:DBCS str[8]:fc:DBCS str[9]:66:f str[10]:c8:DBCS str[11]:fd:DBCS str[12]:67:g str[13]:b9:DBCS str[14]:fa:DBCS str[15]:68:h str[16]:ce:DBCS str[17]:de:DBCS str[18]:69:i str[19]:cb:DBCS str[20]:ab:DBCS str[21]:6a:j str[22]:b3:DBCS str[23]:fe:DBCS str[24]:6b:k str[25]:cd:DBCS str[26]:f5:DBCS str[27]:6c:l str[28]:ba:DBCS str[29]:c3:DBCS str[30]:6d:m str[31]:cf:DBCS str[32]:b8:DBCS str[33]:6e:n str[34]:d1:DBCS str[35]:fc:DBCS str[36]:6f:o str[37]:b9:DBCS str[38]:ac:DBCS str[39]:70:p str[40]:d6:DBCS str[41]:d0:DBCS str[42]:71:q str[43]:b6:DBCS str[44]:e0:DBCS str[45]:72:r str[46]:b6:DBCS str[47]:f6:DBCS str[48]:73:s str[49]:cb:DBCS str[50]:c0:DBCS str[51]:61:a str[52]:d0:DBCS IsHanZiCorrupt:yes
相關文章
相關標籤/搜索