为什么.净框架StreamReader/作家默认UTF8编码?
-
21-08-2019 - |
题
我只是在寻找的构造对StreamReader/作家和我注意到它利用UTF8为默认。任何人都知道这是为什么呢?我会推测,这将是一个更安全的选择以默认,以Unicode。
解决方案
UTF-8将与任何ASCII文件工作,并且典型地比UTF-16更紧凑的 - 但它仍然覆盖整个的Unicode。我会说,UTF-8是远比UTF-16更常见。它也是XML默认值(当没有BOM和没有明确指定编码)。
为什么你认为它会更好,默认为UTF-16? (这是Encoding.Unicode
是什么。)
编辑:我怀疑你感到困惑正是UTF-8可以处理。 此页面说明它非常清楚,包括如何任何特定的Unicode字符进行编码。这是一个可变宽度编码,但它覆盖了整个的Unicode。
其他提示
UTF8的是强>的Unicode,Unicode编码类型的更具体一个。
更重要的是它与ASCII向后兼容,再加上它是XML标准的默认和HTML
正如已经说过的所有其它的,UTF-8是内的Unicode编码标准。 UTF-8使用可变数目的字节来编码所有Unicode字符有
所有ASCII字符作为被表示,使得ASCII文件可以与现在再费周折读取。只要流中的字节有其第8位(最高位,> 127)集,这触发读取器将其与随后的字节结合起来,直到这是<128。该组合然后被视为1个字符。
有在LATIN-1(ANSII)字符,即使用两个字符编码:例如é被编码为e和'。因此长度( 'E')为2。
Windows使用UTF-16内部,这限制了可编码字符,以64K,这决不是所有Unicde字符。 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
想象一下使用UTF-16或UTF32来保存文件。他们会(文本文件)双线或大小quadrouple相比,ASCII和UTF-8(如果只使用ASCII字符,UTF-8)。 UTF-8不仅允许在Unicode标准的所有字符,即使对于未来的增强,但将其保存空间有效地为好。
一般的前两个字节的文件中,BOM或字节顺序标记,告诉你,其编码标准被使用。如果省略,XML和StreamRedaer使用UTF-8,因为你发现了。这再次让SENCE,为ASCII文件没有BOM,因此在大多数情况下都正确读取。这可能不适用于所有使用LATIN-1的文件是真实的。