在C#中截取字串的方法用string.Substring(),但若遇到中英文都有的字串,
那Run出來的結果就不是我們要的了...如以下範例...
string l_Tmp0 = "abc這是測試";
l_Tmp0.Substring(0,3) ==> abc
l_Tmp0.Substring(0,4) ==> abc這
l_Tmp0.Substring(0,5) ==> abc這是
解決這個問題可以使用System.Text.Encoding.Default.GetString()..
我寫了一個function在此share給各位
在C#中截取字串的方法用string.Substring(),但若遇到中英文都有的字串,
那Run出來的結果就不是我們要的了...如以下範例...
string l_Tmp0 = "abc這是測試";
l_Tmp0.Substring(0,3) ==> abc
l_Tmp0.Substring(0,4) ==> abc這
l_Tmp0.Substring(0,5) ==> abc這是解決這個問題可以使用System.Text.Encoding.Default.GetString()..
我寫了一個function在此share給各位
string SubStr(string a_SrcStr, int a_Cnt) 02
{ 03
return SubStr(a_SrcStr, 0, a_Cnt); 04
} 05
06
/// <summary> 07
/// 將某字串截取某bytes的字串,解決中文字串問題 08
/// </summary> 09
/// <param name="a_SrcStr"></param> 10
/// <param name="a_StartIndex"></param> 11
/// <param name="a_Cnt"></param> 12
/// <returns></returns> 13
string SubStr(string a_SrcStr, int a_StartIndex, int a_Cnt) 14
{ 15
byte[] l_byte = System.Text.Encoding.Default.GetBytes(a_SrcStr); 16
if (a_Cnt <= 0) 17
return ""; 18
//例若長度10 19
//若a_StartIndex傳入9 -> ok, 10 ->不行 20
if (a_StartIndex+1 > l_byte.Length) 21
return ""; 22
else 23
{ 24
//若a_StartIndex傳入9 , a_Cnt 傳入2 -> 不行 -> 改成 9,1 25
if (a_StartIndex + a_Cnt > l_byte.Length) 26
a_Cnt = l_byte.Length - a_StartIndex; 27
} 28
return System.Text.Encoding.Default.GetString(l_byte, a_StartIndex, a_Cnt); 29
}測試結果...
string l_Tmp = "abc這是測試";
SubStr(l_Tmp, 3) ==> abc
SubStr(l_Tmp, 4) ==> abc?
SubStr(l_Tmp, 5) ==> abc這
SubStr(l_Tmp, 6) ==> abc這?
SubStr(l_Tmp, 7) ==> abc這是
SubStr(l_Tmp, 20) ==> abc這是測試
SubStr(l_Tmp, 3,2) ==> 這
SubStr(l_Tmp, 20,2) ==>
至於如何去截一半中文產生的?問號,期待高手指教一下..
update 97/11/12感謝ryantsai兄的回應,下方SubStr已根據ryantsai兄的方法改為新版
public string SubStr(string a_SrcStr, int a_StartIndex, int a_Cnt)
{
Encoding l_Encoding = Encoding.GetEncoding("big5", new EncoderExceptionFallback(), new DecoderReplacementFallback(""));
byte[] l_byte = l_Encoding.GetBytes(a_SrcStr);
if (a_Cnt <= 0)
return "";
//例若長度10
//若a_StartIndex傳入9 -> ok, 10 ->不行
if (a_StartIndex + 1 > l_byte.Length)
return "";
else
{
//若a_StartIndex傳入9 , a_Cnt 傳入2 -> 不行 -> 改成 9,1
if (a_StartIndex + a_Cnt > l_byte.Length)
a_Cnt = l_byte.Length - a_StartIndex;
}
return l_Encoding.GetString(l_byte, a_StartIndex, a_Cnt);
}