Encoding.Unicode
只是UTF-16的名称吗?那么为什么只将它称为Unicode而不是UTF16?
Microsoft在encoding documentation中指出,对于大多数情况和应用程序,应避免使用Encoding.ASCII
和Encoding.Default
。
使用System.Text.Encoding
时。在大多数情况下,我应该使用Encoding.Unicode
还是Encoding.UTF8
?
答案 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相比,字节存储的可以更小,特别是对于东亚语言。