C# 使用Encoding.Default.GetBytes(s).Length求串长

freecodex 2015-03-10 09:34:12
一个面试题:
 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的区别吗?或者说同样的规格在不同平台在实现上的不同呢?
...全文
1222 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjq 2015-03-10
  • 打赏
  • 举报
回复
Encoding.Default 是指当前系统的默认代码页。中文系统是GBK,在线编译环境很可能就是Unicode/ASCII,如果是日本的说不定还是JIS。自然结果是不一样的。这也是在编程中,一定要避免使用Encoding.Default的原因
freecodex 2015-03-10
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
Default当然在不同系统上不一样了。你敢不敢都用一个明确的编码方式,而不是Default?
多谢
freecodex 2015-03-10
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
一个中文是单字节,一个中文是双字节。 你要用UTF8或GB2312来看就会统一了。Default是根据平台来决定的
一个字节如何存储中文呢?
freecodex 2015-03-10
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你把Encoding.Default打印出来看看呢,确认他们是一样的?
确实不一样:在线编译器使用的是ASCIIEncoding,VS使用的是DBCSCodePageEncoding。再问一个问题,使用ASCIIEncoding如何存储中文?
  • 打赏
  • 举报
回复
Default当然在不同系统上不一样了。你敢不敢都用一个明确的编码方式,而不是Default?
本拉灯 2015-03-10
  • 打赏
  • 举报
回复
一个中文是单字节,一个中文是双字节。 你要用UTF8或GB2312来看就会统一了。Default是根据平台来决定的
  • 打赏
  • 举报
回复
你把Encoding.Default打印出来看看呢,确认他们是一样的?

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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