日期:2014-05-20  浏览次数:20412 次

关于字符数截取的问题
在vb.net中,是不是字符串的Length属性是字符的字符数,而不是字节数
而SubString截取的也是字符数而不是字节数?

如果我要判断一个字符串的字节长度,如果大于20,则截取前20位,应该怎么做呢

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

------解决方案--------------------
你说的没错,截取前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
------解决方案--------------------
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);
------解决方案--------------------
If Encoding.Default.GetByteCount(str) > 20 Then str = Encoding.Default.GetString(Encoding.Default.GetBytes(str), 0, 20)