« TrueCrypt 使い方 | メイン | 半角カナを全角に変換 »

バイト数指定で文字列を切り出す

■方式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();
}

トラックバック

このエントリーのトラックバックURL:
http://matsystem.net/mt/mt-tb.cgi/128

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年02月14日 17:40に投稿されたエントリーのページです。

ひとつ前の投稿は「TrueCrypt 使い方」です。

次の投稿は「半角カナを全角に変換」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。