[C#] 計算字串的長度方式

  • 78792
  • 0
  • C#
  • 2011-07-15

摘要:C# 計算字串的長度方式

怕之後年紀大會忘記,趕緊記下來先

.NET Framework 中有內建類別(Encoding )取得字串的長度 

想要取得字串中是否含有中文字串的實際長度,有下列作法 

Ⅰ、Length:取得目前 String 物件中字元的數目,僅計算字串長度(中文 2 byte,英文 1 byte)
Ⅱ、GetByteCount:計算編碼一組字元所產生的位元組數目(判斷多少位元組會編碼一組 Unicode 字元)
Ⅲ、GetBytes:計算解碼位元組序列所產生的字元數目(執行實際的編碼作業)

PS:記得先參考 System.Text 

《範例》

string myString = "讓你媽媽NEW一下";
// Length
Response.Write("Length:" + myString.Length);

// GetByteCount:使用目前系統的編碼方式
Response.Write("GetByteCount:" + Encoding.Default.GetByteCount(myString));

// GetBytes
Response.Write("GetBytes:" + Encoding.Default.GetBytes(myString).Length.ToString());

int myStringCount = 0;
for (int i = 0; i < myString.Length; i++)
{
  byte[] tIntByte = Encoding.Default.GetBytes(myTextBoxText.Substring(i, 1));
                
  // 中文字
  if (tIntByte.Length == 2)
  {
    //To Do Something
  }

  myStringCount += tIntByte.Length;
}
Response.Write("GetBytes(FOR):" + myStringCount.ToString());

《結果》

另外需要注意的一點,如果你是使用 GetBytes 計算字串長度的話

需要注意網頁編碼的方式,有可能因為編碼方式的不同,使用 GetBytes 時會有不同的結果

所以如果取得的字串長度跟你想像中的有差異,可以檢查看看網頁編碼的方式喔!

《範例》

Response.Write("GetBytes(big5):" + Encoding.GetEncoding("big5").GetBytes(myString).Length.ToString());
Response.Write("GetBytes(utf-8):" + Encoding.GetEncoding("utf-8").GetBytes(myString).Length.ToString());

《結果》

參考:

MSDN String

MSDN Encoding 類別

有問題請多多指教,謝謝 :D