C#WriteAllBytes忽略字符编码

Ton*_*ham 3 c# encoding ascii utf-8 system.io.file

我正在使用以下代码:

File.WriteAllBytes("c:\\test.xml", Encoding.UTF8.GetBytes("THIS IS A TEST"))
Run Code Online (Sandbox Code Playgroud)

理论上应该写一个UTF8文件,但我只得到一个ANSI文件.我也尝试过这只是特别冗长;

File.WriteAllBytes("c:\\test.xml", ASCIIEncoding.Convert(ASCIIEncoding.ASCII, UTF8Encoding.UTF8, Encoding.UTF8.GetBytes("THIS IS A TEST")))
Run Code Online (Sandbox Code Playgroud)

尽管如此,问题仍然存在.

我正在测试输出的文件,通过加载TextPad正确读取格式(我用样本文件测试,因为我知道这些东西有时可能有点奇怪)

Mar*_*ell 7

WriteAllBytes并没有忽略编码 - 而是:当你调用时,你已经完成了编码GetBytes.整个问题WriteAllBytes是它写入字节.字节没有编码; 相反:编码是从文本(string此处)转换为字节(byte[]此处)的过程.

对于所有ASCII字符,UTF-8与ASCII相同 - 即0-127.所有"THIS IS A TEST"都是纯ASCII,因此UTF-8和ASCII是相同的.

  • @AlexeiLevenkov在我的整个编程生涯中,我想我见过某人*实际上使用*一个关于*两次*的UTF-8 BOM,并且其中至少有一个(可能两者)都是因为消耗而导致错误的错误代码没想到它:)但是,你可以写,而且*是*这样的事情 - `new UTF8Encoding(true).GetPreamble()` (2认同)