【问题标题】:C# ASCII or UnicodeC# ASCII 或 Unicode
【发布时间】:2011-01-03 18:38:49
【问题描述】:

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

在 msdn 和其他 web 示例中执行以下操作:

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

这是因为这些代码示例太旧了吗?不应该是:

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

感谢您的意见!

【问题讨论】:

    标签: c# unicode ascii


    【解决方案1】:

    这取决于 - 您希望结果是 ASCII 还是 UTF-16?当你想要另一个时,每个都是错误的。

    如果您在谈论某种网络协议,您必须找出该协议所期望的字符编码。使用错误的编码,会发生坏事。

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

    【讨论】:

    • 我正在实现客户端/服务器的两端,所以我来决定。我认为 Unicode 是一种选择,因为它能够容纳不同的语言。我可能错了!
    • @ikurtz:我建议在大多数情况下使用 UTF-8 而不是 Unicode,因为它通常会减少流量。有例外(远东字符在 UTF-8 中通常会更大),还有其他缺点(您不能直接从代码点的数量计算二进制数据的大小),但 IMO 通常是个好主意.
    • 关于获取邮件大小的观点非常好!我明白他们为什么使用 ASCII。
    • 我第二次使用 UTF-8,它几乎总是存储和在线的最佳选择。 UTF-16LE(微软非常误导地称之为“Unicode”)只对快速内存访问非常有用。但是,如果您在 .NET 中请求 Encoding.UTF8,您通常会得到一个不幸的 UTF-8 变体,它会在字节的前面放置一个虚假的、麻烦的 BOM。要获得干净的 UTF-8,您必须说 new UTF8Encoding(false)
    • @bobince:这取决于您使用编码的方式。例如,Encoding.GetBytes 不会发出 BOM。
    猜你喜欢
    • 2011-05-27
    • 2012-12-26
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多