代码之家  ›  专栏  ›  技术社区  ›  Quibblesome

为什么.NET Framework StreamReader/Writer默认为UTF8编码?

  •  1
  • Quibblesome  · 技术社区  · 17 年前

    4 回复  |  直到 17 年前
        1
  •  6
  •   Jon Skeet    17 年前

    UTF-8可用于任何ASCII文档,通常比UTF-16更紧凑,但它仍然涵盖整个Unicode。我认为UTF-8是 比UTF-16更常见。它也是XML的默认值(当没有指定BOM表和显式编码时)。

    Encoding.Unicode 是的。)

    This page 非常清楚地描述了它,包括任何特定Unicode字符的编码方式。这是一种可变宽度编码,但它涵盖了整个Unicode。

        2
  •  6
  •   blowdart    17 年前

    Unicode,更具体地说是Unicode编码类型之一。

        3
  •  2
  •   Anton Gogolev    17 年前

    “Unicode”是标准的名称,因此没有“Unicode”这样的编码。相反,有两种映射方法: UTF UCS .

    至于“为什么”部分,UTF-8与ASCII具有最大的兼容性。

        4
  •  2
  •   Ralph M. Rickenbach    17 年前

    所有ASCII字符都按原样表示,这样ASCII文件就可以通过进一步的ado读取。一旦流中的一个字节设置了其第8位(最高位,>127),这将触发读取器将其与下一个字节组合,直到>128然后将该组合视为1个字符。

    Windows在内部使用UTF-16,这将可编码字符限制为64K,这绝不是所有Unicode字符。UTF-32目前允许所有字符,但也受到人为限制。并且两者都与ASCII不向上兼容,因为它们都有前导零:

    A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041
    

    还有小端和大端编码:

    A = UTF-16 big endian h0041 = UTF-16 little endian h4100
    

    想象一下使用UTF16或UTF32来保存文件。与ASCII和UTF-8(如果只使用ASCII字符,则为UTF-8)相比,它们(对于文本文件)的大小将增加一倍或四倍。UTF-8不仅允许unicode标准中的所有字符,甚至可以用于将来的增强,还可以有效地节省空间。

    推荐文章