从这里
从本质上讲,字符串使用UTF-16字符编码形式
但是,当节能VS 的StreamWriter :
这个构造函数使用UTF-8编码的StreamWriter没有字节顺序标记(BOM),
我已经看到了这个样本(断链删除):
它看起来像utf8
是一些字符串较小,而utf-16
是在其他一些字符串小。
- 那么,为什么.NET使用
utf16
作为默认编码字符串,而utf8
保存文件?
谢谢。
PS香港专业教育学院已经阅读了著名的文章
从这里
从本质上讲,字符串使用UTF-16字符编码形式
但是,当节能VS 的StreamWriter :
这个构造函数使用UTF-8编码的StreamWriter没有字节顺序标记(BOM),
我已经看到了这个样本(断链删除):
它看起来像utf8
是一些字符串较小,而utf-16
是在其他一些字符串小。
utf16
作为默认编码字符串,而utf8
保存文件? 谢谢。
PS香港专业教育学院已经阅读了著名的文章
如果你感到快乐忽略代理对(或等价地,基本多文种平面外你的应用程序需要的字符的可能性),UTF-16有一些不错的性能,基本上是由于总是要求每个代码单元的两个字节,并代表所有BMP字符每一个单独的代码单元。
考虑基本类型char
。 如果我们使用UTF-8作为内存中表示,想应付所有 Unicode字符,有多大会这样? 这可能是长达4个字节...这意味着我们总是要分配4个字节。 在这一点上,我们还不如用UTF-32!
当然,我们可以使用UTF-32作为char
的表现,但UTF-8 string
表示,转换,因为我们去。
UTF-16的两个缺点是:
(作为一个方面说明,我相信Windows使用UTF-16 Unicode数据,它是有道理的.NET跟风互操作的原因。这只是推一万步的问题虽然)。
由于代理对的问题,我想,如果一种语言/平台正在从头开始设计,没有互操作要求(但在统一的基础文本处理),UTF-16不会是最好的选择。 无论是UTF-8(如果你想存储效率和获得的第n个字符而言并不介意一些处理复杂性)或UTF-32(另一种方式圆)会是一个更好的选择。 (即使获得第n个字符有“问题”,由于事情像不同的标准化形式。文字是很难...)
与许多“为什么这样选择”的问题,这是由历史决定的。 窗口在其1993年的核心变成了统一的操作系统那时候,统一仍只有65535码点,这几天叫UCS代码空间。 但直到1996年为止的Unicode所获得的额外面的编码空间扩展到一百万码点。 和替代对适合他们转换成16位编码,从而设定UTF-16标准。
.NET字符串是UTF-16,因为这是一个非常适合与操作系统编码,则不需要转换。
UTF-8的历史迷雾。 当然过去的Windows NT,从1993年11月过了一段时间,以获得脚保持RFC-3629的日期,互联网是工具。
UTF-8是文本存储和传输的默认值,因为它是大多数语言相对紧凑的形式(有些语言是更紧凑的UTF-16相比,UTF-8)。 每个特定的语言有一个更有效的编码。
UTF-16用于在内存中的字符串,因为它是每个字符解析更快,直接映射到Unicode字符类和其他表。 Windows中的所有字符串函数使用UTF-16,并有好几年了。