Encoding.Unicode
是不是只是UTF-16的别名?那么为什么它被称为Unicode而不是UTF16?
在编码文档中,Microsoft指出,在大多数情况和应用程序中,您应避免使用Encoding.ASCII
和Encoding.Default
。
当使用System.Text.Encoding
时,在大多数情况下,我应该使用Encoding.Unicode
还是Encoding.UTF8
?
Encoding.Unicode
是不是只是UTF-16的别名?那么为什么它被称为Unicode而不是UTF16?
在编码文档中,Microsoft指出,在大多数情况和应用程序中,您应避免使用Encoding.ASCII
和Encoding.Default
。
当使用System.Text.Encoding
时,在大多数情况下,我应该使用Encoding.Unicode
还是Encoding.UTF8
?
Encoding.Unicode
是否只是UTF-16的名称?
是的,具体来说是小端UTF-16。对于大端UTF-16,Encoding
有一个单独的BigEndianUnicode
属性。
那么为什么它被称为Unicode而不是UTF16呢?
出于历史原因。Microsoft是第一批采用Unicode的公司之一,因此在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广泛存在。
Encoding.Unicode
和UTF-16是一样的吗?我应该使用Encoding.UTF8
还是Encoding.Unicode
? - undefinedEncoding.Unicode
与UTF16相同,而默认情况下应该使用Encoding.UTF8
。我认为这一点在我的回答中已经很清楚了。 - undefined
Encoding
的具体需求。你正在问一个有主观倾向的问题。我的意见是UTF-8通常足够了,但UTF-16也有其用途。 - undefined