Encoding.Unicode
只是 UTF-16 的名称吗?那为什么它只叫Unicode而不是UTF16呢?
在编码文档中,Microsoft指出,对于大多数方案和应用程序,应避免使用Encoding.ASCII
和Encoding.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