基本上,字符串使用UTF-16字符编码形式。
但是当保存时与StreamWriter相比:
此构造函数创建一个不带字节顺序标记(BOM)的UTF-8编码的StreamWriter,
我看过这个示例(已删除损坏的链接):
看起来对于某些字符串,utf8
更小,而对于另一些字符串,utf-16
更小。
- 那么为什么 .net 使用
utf16
作为字符串的默认编码,而使用utf8
来保存文件呢?
谢谢。
p.s. 我已经阅读了这篇著名的文章。
基本上,字符串使用UTF-16字符编码形式。
但是当保存时与StreamWriter相比:
此构造函数创建一个不带字节顺序标记(BOM)的UTF-8编码的StreamWriter,
我看过这个示例(已删除损坏的链接):
看起来对于某些字符串,utf8
更小,而对于另一些字符串,utf-16
更小。
utf16
作为字符串的默认编码,而使用 utf8
来保存文件呢?谢谢。
p.s. 我已经阅读了这篇著名的文章。
char
表示,但在 string
表示中使用UTF-8,在转换时进行转换。对于许多“为什么选择这个”的问题,这是由历史决定的。 Windows在1993年成为Unicode操作系统的核心。当时,Unicode仍然只有65535个码位的编码空间,现在被称为UCS。直到1996年,Unicode才获得了补充平面来将编码空间扩展到一百万个码位。并使用代理对将它们适配到16位编码中,从而确立了utf-16标准。
.NET字符串使用utf-16,因为这与操作系统编码非常匹配,不需要进行转换。
utf-8的历史比较复杂。自Windows NT之后,RFC-3629可以追溯到1993年11月。它花了一段时间才在互联网上得以推广。
UTF-8是文本存储和传输的默认格式,因为对于大多数语言来说,它是一个相对紧凑的形式(有些语言在UTF-16中比UTF-8更紧凑)。每种具体语言都有更有效的编码方式。
UTF-16用于内存中的字符串,因为每个字符的解析速度更快,并且直接映射到Unicode字符类和其他表。Windows中的所有字符串函数都使用UTF-16,并已使用多年。