C# ASCII或Unicode

5

您好,我是一名编程和网络开发的初学者。我有一个关于ASCII和Unicode编码的问题。

在MSDN和其他网站示例中,经常会使用以下内容:

byte[] byteData = Encoding.ASCII.GetBytes(data);

这是因为这些代码示例过时了吗?难道不应该是这样的吗?
byte[] byteData = Encoding.Unicode.GetBytes(data);

感谢您的输入!
1个回答

10

这要看你是否需要ASCII或UTF-16的结果。如果你需要其中一种,选择另一种就是错误的。

如果你在谈论某个网络协议,你必须找出该协议所预期的字符编码。使用错误的编码会导致不良后果。

当然了,ASCII有着很大的限制 - 它非常基于英语(仅拉丁字符,没有重音符号),但对于某些协议来说是正确的。其他协议可能使用UTF-16(Encoding.Unicode)、UTF-8或其他编码... 或者他们会让你在协议中自己指定编码。


我正在实现客户端/服务器的双方,所以我可以决定。我认为Unicode是一个不错的选择,因为它能够容纳不同的语言。但我也可能是错的! - iTEgg
7
我建议在大多数情况下使用UTF-8而不是Unicode,因为它通常会减少流量。当然也有例外(远东字符在UTF-8中通常会更大),还有其他缺点(不能直接从码点数量计算二进制数据的大小),但总体来说我认为这是一个好主意。 - Jon Skeet
关于获取消息大小的观点非常好!我理解为什么他们使用ASCII。 - iTEgg
1
我赞同使用UTF-8,它几乎总是存储和传输的最佳选择。UTF-16LE(微软非常误导性地称为“Unicode”)只适用于快速的内存访问。然而,在.NET中如果你要求Encoding.UTF8,你通常会得到一个不幸的UTF-8变体,它在字节前面放置了一个虚假的、麻烦的BOM。要获得干净的UTF-8,你必须说new UTF8Encoding(false) - bobince
@bobince:这取决于你如何使用编码。例如,Encoding.GetBytes不会发出BOM。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接