是Encoding.UTF8还是Encoding.Unicode?

时间:2018-09-27 12:40:55

标签: .net unicode encoding utf-8

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

Microsoft在encoding documentation中指出,对于大多数情况和应用程序,应避免使用Encoding.ASCIIEncoding.Default

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

2 个答案:

答案 0 :(得分:3)

它来自Unicode的早期。 Unicode 1.0是一种16位编码,因为假定65536个代码点就足够了。 Unicode 2.0放弃了此限制,但是包括Microsoft在内的Unicode的早期采用者将其编码命名为Unicode,并且一直存在。

如今,除非有特定的(例如,需要与之集成的旧版软件)理由,否则您应该使用UTF-8。

这样做的原因是ASCII与UTF-8二进制兼容,并且存在很多 ASCII码

答案 1 :(得分:2)

  

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

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

  

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

出于历史原因。微软是最早采用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-8相比,

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