关于网友提出的“ iis70与iis60/51下GetByteCount取值不一样”问题疑问,本网通过在网上对“ iis70与iis60/51下GetByteCount取值不一样”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: iis70与iis60/51下GetByteCount取值不一样
描述: 要获取一串字符串的字节数,众所周知使用System.Text.Encoding.Default.GetByteCount()方法
在iis6.0和iis5.1下都能正确获取字节数,如:
System.Text.Encoding.Default.GetByteCount("和谐abc") 会返回数值7,
(本机运行.net clr版本为2.0.50727.1433)
但放到服务器上,System.Text.Encoding.Default.GetByteCount("和谐abc") 却返回5
(服务器是iis7.0的.NET CLR 版本为 2.0.50727.4214)
为什么会这样?如何解决?
解决方案1: 你可以测试很多,例如
System.Text.Encoding.Default.GetByteCount("和谐abc")
System.Text.Encoding.UTF8.GetByteCount("和谐abc")
System.Text.Encoding.UTF7.GetByteCount("和谐abc")
System.Text.Encoding.UTF32.GetByteCount("和谐abc")
System.Text.Encoding.Unicode.GetByteCount("和谐abc")
System.Text.Encoding.ASCII.GetByteCount("和谐abc")
System.Text.Encoding.GetEncoding("gb2312").GetByteCount("和谐abc")
其中只有ASCII编码长度是5(而gb2312是7)。
但是长度不重要,编码的目的首先是为了翻来覆去地传递、转换、保存字节信息时总是保持正确性,不是为了凑字节长度
解决方案2:
System.Text.UTF8Encoding.UTF8.GetByteCount();这样看看多少
public string cutString(string strInput, int intLen)
{
strInput = strInput.Trim();
byte[] myByte = System.Text.Encoding.Default.GetBytes(strInput);
if (myByte.Length > intLen)
{
string resultStr = "";
for (int i = 0; i < strInput.Length; i++)
{
byte[] tempByte = System.Text.Encoding.Default.GetBytes(resultStr);
if (tempByte.Length < intLen)
{
resultStr += strInput.Substring(i, 1);
}
else
{
break;
}
}
return resultStr + "...";
}
else
{
return strInput;
}
}
以上介绍了“ iis70与iis60/51下GetByteCount取值不一样”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2172386.html