搜尋此網誌

2014年10月17日 星期五

[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());
《結果》

沒有留言:

張貼留言