急!急!急!请教在asp.net中计算字符串所占字节数的方法.

时间:2022-01-15 10:48:41
对一个字符串取其字节数,也就是在网页上显示出来的字节数,也就是汉字占两位,英文数字占一位
如"A中国人",我需要它返回7
而不是VB中的LEN返回的4或者LENB返回的8
而且.net中也没有lenb函数

请给出在asp.net中可以实现的方法

18 个解决方案

#1


String.Length

#2


???

#3


length是字符串长度
System.Text.Encoding.Default.GetByteCount()返回字节长度

#4


//截取超长的字符串
//传入参数:  allLength    允许的字符段总长度;
//           prefixString 前一段字符;
//           parentString 后一段字符;
#region public string GetStringChild(int allLength,string prefixString, string parentString)
public string GetStringChild(int allLength,string prefixString, string parentString)
{
string childString = parentString;

//设置总长度
int ALLLENGTH = allLength;

//实际取长度
int length;

if (prefixString.Length + parentString.Length > allLength + 1 )
{
length = ALLLENGTH - prefixString.Length;

childString = parentString.Substring(0, length) + "..";
}
return childString;
}
#endregion

#5


System.Text.UnicodeEncoding.GetByteCount 方法 (String)

String chars = "Unicode Encoding Example";
UnicodeEncodingUnicode = new UnicodeEncoding();
int byteCount = Unicode.GetByteCount(chars);

#6


to 回复人: lonelydreamsym(惊梦) ( ) 信誉:100 
用这个函数结果也不对
如:
同是汉字的"期"和"过",一个为1一个为2
System.Text.Encoding.Default.GetByteCount("期") =2
System.Text.Encoding.Default.GetByteCount("过") =1

#7


回复人: zjf_dl(飘香剑雨) 

不行啊,跟上面结果一样

#8


帮你顶
str.ToLower().Length
把它全转代成小写再计算长度呢?

#9


有小写汉字吗

#10


等一会告诉你结果,我也正在办这事在

#11


有小写汉字吗


.net认为有
要不怎么不报异常呢?

#12


ASP.NET 有length

#13


排序正常
全角二个字的和半角三个字的可以区分
你用ArrayList 的一个例子olist
olist.Sort(new sortByLength())
你可以看看排序结果(汉字多的在前面)
public class sortByLength : IComparer
{
public int Compare(object x,object y)
{

if(((string)x).ToLower().Length > ((string)y).ToLower().Length)
return -1;
else if(((string)x).ToLower().Length == ((string)y).ToLower().Length)
return 0;
else
return 1;


}
}
排序前 :


半角
全角
半角一
全角二

排序后:
半角一
全角二
全角
半角




因为该排译是非稳定排序,同一长度位置发生了改变


#14


to wildroseck 

使用 GB2312 的 Encoding就可以了

#15


Encoding.GetEncoding("GB2312").GetBytes("期")

#16


System.Text.Encoding.GetEncoding("GB2312").GetByteCount("A过");

#17


public static  int GetByteSize( string s )
{
byte[] bytes = System.Text.Encoding.Default.GetBytes(s);
return bytes.Length;
}

#18


多谢各位
特别是tiaoci(我挑刺,我快乐)

#1


String.Length

#2


???

#3


length是字符串长度
System.Text.Encoding.Default.GetByteCount()返回字节长度

#4


//截取超长的字符串
//传入参数:  allLength    允许的字符段总长度;
//           prefixString 前一段字符;
//           parentString 后一段字符;
#region public string GetStringChild(int allLength,string prefixString, string parentString)
public string GetStringChild(int allLength,string prefixString, string parentString)
{
string childString = parentString;

//设置总长度
int ALLLENGTH = allLength;

//实际取长度
int length;

if (prefixString.Length + parentString.Length > allLength + 1 )
{
length = ALLLENGTH - prefixString.Length;

childString = parentString.Substring(0, length) + "..";
}
return childString;
}
#endregion

#5


System.Text.UnicodeEncoding.GetByteCount 方法 (String)

String chars = "Unicode Encoding Example";
UnicodeEncodingUnicode = new UnicodeEncoding();
int byteCount = Unicode.GetByteCount(chars);

#6


to 回复人: lonelydreamsym(惊梦) ( ) 信誉:100 
用这个函数结果也不对
如:
同是汉字的"期"和"过",一个为1一个为2
System.Text.Encoding.Default.GetByteCount("期") =2
System.Text.Encoding.Default.GetByteCount("过") =1

#7


回复人: zjf_dl(飘香剑雨) 

不行啊,跟上面结果一样

#8


帮你顶
str.ToLower().Length
把它全转代成小写再计算长度呢?

#9


有小写汉字吗

#10


等一会告诉你结果,我也正在办这事在

#11


有小写汉字吗


.net认为有
要不怎么不报异常呢?

#12


ASP.NET 有length

#13


排序正常
全角二个字的和半角三个字的可以区分
你用ArrayList 的一个例子olist
olist.Sort(new sortByLength())
你可以看看排序结果(汉字多的在前面)
public class sortByLength : IComparer
{
public int Compare(object x,object y)
{

if(((string)x).ToLower().Length > ((string)y).ToLower().Length)
return -1;
else if(((string)x).ToLower().Length == ((string)y).ToLower().Length)
return 0;
else
return 1;


}
}
排序前 :


半角
全角
半角一
全角二

排序后:
半角一
全角二
全角
半角




因为该排译是非稳定排序,同一长度位置发生了改变


#14


to wildroseck 

使用 GB2312 的 Encoding就可以了

#15


Encoding.GetEncoding("GB2312").GetBytes("期")

#16


System.Text.Encoding.GetEncoding("GB2312").GetByteCount("A过");

#17


public static  int GetByteSize( string s )
{
byte[] bytes = System.Text.Encoding.Default.GetBytes(s);
return bytes.Length;
}

#18


多谢各位
特别是tiaoci(我挑刺,我快乐)