我只是在寻找的构造对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

"Unicode"名称的标准,因此没有此类编码为"Unicode".相反,有两种绘图方法: UTFUCS.

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

正如已经说过的所有其它的,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的文件是真实的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top