1. 程式人生 > >C# 位元組數限制(限制字串位元組數)

C# 位元組數限制(限制字串位元組數)

本章講述:位元組數限制

限制輸入字元(中文)的位元組個數,超過後,擷取多餘的位元組

引用例項:
int nLength = GetBytesOfString(OsdText.Text);
if (nLength > 30)
{
	OsdText.Text = GetSubStringByLength(OsdText.Text, 30);
}


//獲取輸入資料位元組大小 返回大小
public int GetBytesOfString(string Text)
{
	int nByte = 0;
	byte[] bytes = Encoding.Unicode.GetBytes(Text);
	for (int i = 0; i < bytes.GetLength(0); i++)
	{
		//  偶數位置,如0、2、4等,為UCS2編碼中兩個位元組的第一個位元組
		if (i % 2 == 0)
		{
			nByte++;      //  在UCS2第一個位元組時n加1
		}
		else
		{
			//  當UCS2編碼的第二個位元組大於0時,該UCS2字元為漢字,一個漢字算兩個位元組
			if (bytes[i] > 0)
			{
				nByte++;
			}
		}
	}

	return nByte;
}

//擷取字串指定位元組數的內容,並返回實際擷取的位元組數
private string GetSubStringByLength(string Text, int LimitSize)
{
	byte[] bytes = Encoding.Unicode.GetBytes(Text);
	int nByte = 0;                       //  表示當前的位元組數
	int i = 0;                              //  要擷取的位元組數
	for (; i < bytes.GetLength(0) && nByte < LimitSize; i++)
	{
		if (i % 2 == 0)                 //  偶數位置,如0、2、4等,為UCS2編碼中兩個位元組的第一個位元組
		{
			nByte++;                    //  在UCS2第一個位元組時n加1
		}
		else
		{
			if (bytes[i] > 0)               //  當UCS2編碼的第二個位元組大於0時,該UCS2字元為漢字,一個漢字算兩個位元組
			{
				nByte++;
			}
		}
	}

	//  如果i為奇數時,處理成偶數
	if (i % 2 == 1)
	{
		if (bytes[i] > 0)                               //  該UCS2字元是漢字時,去掉這個截一半的漢字
			i = i - 1;
		else
			i = i + 1;                                  //  該UCS2字元是字母或數字,則保留該字元
	}
	LimitSize = i;

	return Encoding.Unicode.GetString(bytes, 0, i);
}