【问题标题】:Encoding.UTF8 or Encoding.Unicode?Encoding.UTF8 还是 Encoding.Unicode?
【发布时间】:2018-09-27 12:40:54
【问题描述】:

Encoding.Unicode 只是 UTF-16 的名称吗?那为什么只叫 Unicode 而不是 UTF16?

encoding documentation 中,Microsoft 声明对于大多数场景和应用程序,您应该避免使用Encoding.ASCIIEncoding.Default

使用System.Text.Encoding 时。在大多数情况下,我应该使用Encoding.Unicode 还是Encoding.UTF8

【问题讨论】:

    标签: .net unicode encoding utf-8


    【解决方案1】:

    Encoding.Unicode 只是 UTF-16 的名称吗?

    是的。具体来说,对于小端 UTF-16。 Encoding 有一个单独的 BigEndianUnicode 属性,用于大端 UTF-16。

    那为什么只叫 Unicode 而不是 UTF16?

    出于历史原因。 Microsoft 是最早采用 Unicode 的公司之一,因此它在 UTF-16 发明之前的 Unicode 早期就在 Windows 中实现了“Unicode”。 “Unicode”是微软事实上的名称,指的是它的原生 Unicode 编码,它曾经是 UCS-2,现在是 UTF-16。

    使用System.Text.Encoding 时。在大多数情况下,我应该使用Encoding.Unicode 还是Encoding.UTF8

    这实际上取决于您的特定场景。使用适合您需要的任何编码。两种编码都有优点和缺点。

    UTF-8 通常用于通信协议中的互操作性,因为它不受字节序问题的困扰,并且在很大程度上与大多数现有的基于文本的协议兼容。对于大多数语言,字节存储通常也比 UTF-16 小。

    UTF-16通常比 UTF-8 更容易在内存中处理,这就是为什么这么多库和框架将它用于字符串的原因。而且它可以比 UTF-8 更小,尤其是对于东亚语言。

    【讨论】:

    • 那么在大多数情况下,在大多数情况下,在大多数应用程序中,我应该使用哪一个?哪个应该是我的“去”变体? UTF-8 还是 UTF-16?
    • @Fred 在自 VB4 以来的许多语言中,UTF-16/UCS-2 用于文本数据类型(字符串、字符、字符)。所以很自然地使用那里的那些。 Windows API 和 NTFS 也使用它,所以也一样。在 SQL Server 中,NCHAR/NVARCHAR 是处理 Unicode 文本的唯一方法。在 UTF-8 方面,JSON 在系统之间传输时需要为 UTF-8。最终,选择的字符编码是必须在作者和读者之间共享的元数据。
    • @Fred 再次,这取决于您对使用Encoding 的计划的特殊需求。你在问一个自以为是的问题。我的意见是 UTF-8 通常就足够了,但 UTF-16 也有用处
    【解决方案2】:

    它来自 Unicode 的早期。 Unicode 1.0 是一种 16 位编码,因为假设 65536 个代码点就足够了。 Unicode 2.0 放弃了这个限制,但是 Unicode 的早期采用者,包括微软,将他们的编码命名为 Unicode,并且它已经卡住了。

    现在您应该使用 UTF-8,除非您有特定的需要集成的旧软件,例如有理由这样做。

    原因是 ASCII 与 UTF-8 二进制兼容,并且有 很多 ASCII 在那里

    【讨论】:

    • 我知道我应该更喜欢 UTF-8 而不是 ASCII。但是Encoding.Unicode 和 UTF-16 一样吗?我应该使用Encoding.UTF8 还是Encoding.Unicode
    • Encoding.Unicode 与 UTF16 相同,默认情况下您应该使用 Encoding.UTF8。我认为我的回答很清楚
    • “那里有很多 ASCII”:编码是作者选择的。在 PC 世界(自 1981 年以来),选择 ASCII 非常困难或不可能。它在 MS-DOS 中不可用;它不是任何操作系统(据我所知)和几乎任何程序的默认设置。这样做的原因是大力推动将更大的字符集作为默认设置。不幸的是,当时可用的是几十个字符集,大约 使用用于写入的字符编码读取。
    猜你喜欢
    • 2012-04-02
    • 2018-01-06
    • 2018-04-07
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 2012-09-07
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多