■方式1
private string LeftB(string str,int len)
{
System.Text.Encoding _encode
= System.Text.Encoding.GetEncoding("Shift_JIS");
byte[] bytes = _encode.GetBytes(str);
int bytelen = bytes.Length;
if (len > bytelen) len = bytelen;
return _encode.GetString(bytes,0,len);
}
※この方法だと最後にゴミコードが残り、他の文字と連結させた場合などに
不具合が発生する場合があるのでお勧めしません。
たとえば次のコードを実行すると。
int len = 5;
string val = "あいうえお";
Debug.WriteLine("[" + LeftB(val,len) + "]" );
Debug.WriteLine("------");
[あい]
------
って出力されると思うけど実際には
[あい------
って出力されてしまいます。
■方式2
ちょっと遅いけど安全
private string LeftB(string str,int len)
{
if (str == null) return null;
if (str.Length == 0) return "";
System.Text.Encoding _encode
= System.Text.Encoding.GetEncoding("Shift_JIS");
int iResultLen = 0;
StringBuilder sb = new StringBuilder();
for (int i=0;i<str.Length;i++)
{
char cCur = str[i];
int iCharLen = _encode.GetByteCount(new char[1]{cCur});
iResultLen += iCharLen;
if (iResultLen > len)
{
break;
}
sb.Append(cCur);
}
return sb.ToString();
}