namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "ab某某";
            string a = System.Text.Encoding.Default.ToString();            int i = System.Text.Encoding.Default.GetBytes(str).Length;            int j = str.Length;
            Console.WriteLine(a+i.ToString()+j.ToString());        }
    }
}
i和j都是求长度,结果为啥不同啊

解决方案 »

  1.   

    在c#中,文件通常采用unicode编码,一个英文字符和汉字都是两个字节。??
      

  2.   

    使用 System.Text.Encoding.Default 是个不靠谱的程序。在不同的操作系统上,它会返回不同的值。例如在简体中文系统上,它默认地返回 gb2312。然后在其它操作系统上,值就可能不同了。因此这个程序拿到不同操作系统上的机器去测试,得到的结果就可能不一致,所以说它是一个不靠谱的程序。只有真正需要根据操作系统设置来编码解码的时候,才应该使用System.Text.Encoding.Default。否则,就应该使用一致的编码解码规则,例如使用 System.Text.Encoding.UTF8等等。
      

  3.   

    你可以测试一下 System.Text.Encoding.Unicode,以及其它编码。无论如何,这些都是明确地指定了编码类型。总比胡乱指定个 System.Text.Encoding.Default 强。
      

  4.   

    请问你的意思是不是说(int i = System.Text.Encoding.Default.GetBytes(str).Length;)其实是采用utf-8格式,中文2个字节,英文占1个字节??
      

  5.   

    你好,我的操作系统是中文的,上次测试过好像是gb2312,但是gb2312不是双字节的吗?按照你这样解释,i应该返回的是8,可是我测试得出的是6啊?
      

  6.   

    兄弟你看哈那个getBytes()方法返回值类型,byte[],已经把字符串转化为字节数组咯,一个汉字2个字节,转换为byte[]肯定是6了啥,而j就是字符的个数啊,返回肯定不同啥