当前位置: 代码迷 >> .NET新技术 >> C# 使用Encoding.Default.GetBytes(s).Length求串长,该如何处理
  详细解决方案

C# 使用Encoding.Default.GetBytes(s).Length求串长,该如何处理

热度:575   发布时间:2016-04-25 01:24:20.0
C# 使用Encoding.Default.GetBytes(s).Length求串长
一个面试题:
 static void Main(string[] args)
        {
            string s = "abcdefg某某某;
            int j = System.Text.Encoding.Default.GetBytes(s).Length;
            Console.WriteLine(j);
        }

在VS下编译的结果是13:

在在线编译器上编译的是10:


在MSDN上查到Default的描述:
Gets an encoding for the operating system's current ANSI code page.
它们是相同的操作系统和字符集下编译的,为什么会产生差异呢?是Mono和.Net的区别吗?或者说同样的规格在不同平台在实现上的不同呢?

------解决思路----------------------
你把Encoding.Default打印出来看看呢,确认他们是一样的?
------解决思路----------------------

一个中文是单字节,一个中文是双字节。
你要用UTF8或GB2312来看就会统一了。Default是根据平台来决定的
------解决思路----------------------
Default当然在不同系统上不一样了。你敢不敢都用一个明确的编码方式,而不是Default?
------解决思路----------------------
Encoding.Default 是指当前系统的默认代码页。中文系统是GBK,在线编译环境很可能就是Unicode/ASCII,如果是日本的说不定还是JIS。自然结果是不一样的。这也是在编程中,一定要避免使用Encoding.Default的原因
  相关解决方案