在vb.net中,是不是字符串的Length属性是字符的字符数,而不是字节数
而SubString截取的也是字符数而不是字节数?如果我要判断一个字符串的字节长度,如果大于20,则截取前20位,应该怎么做呢

解决方案 »

  1.   

    对,length是字符数,SubString也是用的字符索引,
    如果要得到字节长度,参见如下的用法:
    string str= "我的一个测试abc";
    System.Console.WriteLine(System.Text.Encoding.Default.GetByteCount(str));
      

  2.   

    你说的没错,截取前20位的方法:
    Private Function GetSubString(ByVal src As String, ByVal length As Integer) As String
    Dim i As Integer
    Dim len As Integer
    Dim ret As String = ""
    For i = 0 To src.Length - 1
    If Asc(src.Substring(i, 1)) < 0 Or Asc(src.Substring(i, 1)) > 255 Then
    len += 2
    Else
    len += 1
    End If
    If len < length Then
    ret += src.Substring(i, 1)
    Else
    Exit For
    End If
    Next
    GetSubString = ret
    End Function
      

  3.   

    获取字符串长度的方法(字节数):
        Private Function GetStringLength(ByVal src As String) As String
            Dim i As Integer
            Dim len As Integer
    For i = 0 To src.Length - 1
    If Asc(src.Substring(i, 1)) < 0 Or Asc(src.Substring(i, 1)) > 255 Then
    len += 2
    Else
    len += 1
    End If
    Next
            GetStringLength = len
        End Function
      

  4.   


    string str = "abcdddc";
                byte[] bytes = Encoding.Default.GetBytes(str);
                byte[] dest = Array.Copy(bytes, 0, dest, 0, 20);
                str = Encoding.Default.GetString(dest);
    类似这样的代码,另外还须自己处理半个汉字和不够20个字节长的情况。
      

  5.   

    string str = "abcdddc";
                byte[] bytes = Encoding.Default.GetBytes(str);
                byte[] dest = new byte[20];
                Array.Copy(bytes, 0, dest, 0, 20);
                str = Encoding.Default.GetString(dest);
      

  6.   

    路过------------------------
    http://fenglin.xland.cn
    ------------------------
      

  7.   

    Dim Count As Integer = System.Text.Encoding.Default.GetByteCount(str)
    If Count > 20 Then
        Dim arr() As Byte = System.Text.Encoding.Default.GetBytes(str)
        str = System.Text.Encoding.Default.GetString(arr, 0, 20)
    End If
      

  8.   

    If Encoding.Default.GetByteCount(str) > 20 Then str = Encoding.Default.GetString(Encoding.Default.GetBytes(str), 0, 20)