一个关于编码的问题

jjyjjyjjy 2007-03-23 10:43:50
using System;
public class code
{
public static void Main()
{
string strTemp = "abcdefg 某某某";
int i = System.Text.Encoding.Default.GetBytes(strTemp).Length;
int j = strTemp.Length;
System.Console.WriteLine(System.Text.Encoding.Default.BodyName);
System.Console.WriteLine(i);
System.Console.WriteLine(j);
}
}
我这里的运行结果:
gb2312
11 //对这个结果不解,知道的解释一下,汉字不是2个字节编码?
11
...全文
185 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjyjjyjjy 2007-03-23
  • 打赏
  • 举报
回复
呵呵,回家再测试一下,晚上结贴
ufoteam 2007-03-23
  • 打赏
  • 举报
回复
System.Text.Encoding.Default.GetByteCount(str);//或者
ufoteam 2007-03-23
  • 打赏
  • 举报
回复
/// <summary>
/// 检测含有中文字符串的实际长度
/// </summary>
/// <param name="str">字符串</param>
private int len(string str)
{
System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding();
byte[] b = n.GetBytes(str);
int l = 0; // l 为字符串之实际长度
for (int i=0;i <= b.Length-1;i++)
{
if (b[i] ==63) //判断是否为汉字或全脚符号
{
l++;
}
l++;
} return l;
}
foyuan 2007-03-23
  • 打赏
  • 举报
回复
你的系统的问题吧

我测试也是14

并且改了改代码 发现允许和预期没有差别

using System;
public class code
{
public static void Main()
{
string strTemp = "abcdefg 某某某";
byte[] l= System.Text.Encoding.Default.GetBytes(strTemp);
foreach(byte b in l)
{
System.Console.WriteLine(b);
}
int i=l.Length;
int j = strTemp.Length;
System.Console.WriteLine(System.Text.Encoding.Default.BodyName);
System.Console.WriteLine(i);
System.Console.WriteLine(j);
}
}

输出
C:\>a
97
98
99
100
101
102
103
32
196
179
196
179
196
179
gb2312
14
11
jjyjjyjjy 2007-03-23
  • 打赏
  • 举报
回复
这个难度与系统有关,我的是2003Server,测试编码结果硬是11,而不是14,不解...
王集鹄 2007-03-23
  • 打赏
  • 举报
回复
//我的测试结果是
gb2312
14
11

系统默认是GB2312
而C#默认是UTF8编码
这里的string.Length()不是代表byte
是代表Char有多少个
xiaoliangwh 2007-03-23
  • 打赏
  • 举报
回复
帮顶 !

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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