iis7.0与iis6.0/5.1下GetByteCount()取值不一样

jomph 2011-08-17 03:22:13
要获取一串字符串的字节数,众所周知使用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)

为什么会这样?如何解决?
...全文
60 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jomph 2011-08-18
  • 打赏
  • 举报
回复
也谢谢吴伟大哥的讲解
jomph 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]
但是长度不重要,编码的目的首先是为了翻来覆去地传递、转换、保存字节信息时总是保持正确性,不是为了凑字节长度
[/Quote]
很不幸,我的目的就是为了凑字节长度,其实旭冉已经猜到我的目的是截取字符串了,但就是不知道有System.Text.Encoding.GetEncoding("gb2312").GetByteCount()的用法
tomysea 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]
引用楼主 jomph 的回复:
为什么会这样?如何解决?

不要乱用Default。

所谓Default,就是说它会去取所在的Windows操作系统的设置,那么同一个程序当你放在不同操作系统下,其Default返回的结果是不同的。你真的需要这个功能吗?你真的考虑到同一个程序放在不同windows下其结果根本不一致的问题了吗?

很明显。如果你需要稳定一致地输出,你就应该明确地使用E……
[/Quote]
分析得很透彻
  • 打赏
  • 举报
回复
你可以测试很多,例如
 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)。

但是长度不重要,编码的目的首先是为了翻来覆去地传递、转换、保存字节信息时总是保持正确性,不是为了凑字节长度
  • 打赏
  • 举报
回复
Default一般都是读的machine.config或者系统设置
指定编码就好了
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jomph 的回复:]
但我要的是中文字符占2,英文字符占1呀[/Quote]

你具体在设计中是统一了什么编码呢?仅仅考虑占几个字节,这好像没有什么意义吧。
  • 打赏
  • 举报
回复
[Quote=引用楼主 jomph 的回复:]
为什么会这样?如何解决?[/Quote]

不要乱用Default。

所谓Default,就是说它会去取所在的Windows操作系统的设置,那么同一个程序当你放在不同操作系统下,其Default返回的结果是不同的。你真的需要这个功能吗?你真的考虑到同一个程序放在不同windows下其结果根本不一致的问题了吗?

很明显。如果你需要稳定一致地输出,你就应该明确地使用Encoding值。只有当你需要根据操作系统环境而改变策略时,才应该使用Default。请搞清楚什么时候才应该使用Default。
jomph 2011-08-17
  • 打赏
  • 举报
回复
这样System.Text.UTF8Encoding.Unicode.GetByteCount() 英文字符也会变成2字节的
子夜__ 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jomph 的回复:]

System.Text.UTF8Encoding.UTF8.GetByteCount()这句在本机及服务器上获取的数值一致,中文字符占3,英文字符占1
但我要的是中文字符占2,英文字符占1呀
[/Quote]
我想要描述的是统一编码。

Response.Write(System.Text.UTF8Encoding.Unicode.GetByteCount("中国").ToString());
jomph 2011-08-17
  • 打赏
  • 举报
回复
System.Text.UTF8Encoding.UTF8.GetByteCount()这句在本机及服务器上获取的数值一致,中文字符占3,英文字符占1
但我要的是中文字符占2,英文字符占1呀
子夜__ 2011-08-17
  • 打赏
  • 举报
回复

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;
}
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧