Encoding.UTF8 or Encoding.Unicode?



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

在编码文档中,Microsoft指出,对于大多数方案和应用程序,应避免使用Encoding.ASCIIEncoding.Default

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

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

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

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

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

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

这实际上取决于您的特定方案。 使用适合您需求的编码。这两种编码都有优点和缺点。

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

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

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

如今,您应该使用 UTF-8,除非您有特定的(例如需要集成的遗留软件(这样做的原因。

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

最新更新