C#文件编码类型改变了吗?

3

我正在使用ASCII编码创建一个文件,但是当我测试该文件的编码类型时,它返回了UTF8Encoding。

有人能解释一下原因或找出我的错误吗?

代码:

创建文件:

 FileStream _textStream = File.Open("CreateAsciiFile.txt", FileMode.Create, FileAccess.Write);
 StreamWriter _streamWriter = new StreamWriter(_textStream, System.Text.Encoding.ASCII);

 Byte[] byteContent = BtyeTowrite();  // This returns the array of byte
 foreach(var myByte in byteContent)
    _streamWriter.Write(System.Convert.ToChar(myByte));

读取文件:

StreamReader sr = new StreamReader(@"C:\CreateAsciiFile.txt",true);
string LineText= sr.ReadLine();
System.Text.Encoding enc = sr.CurrentEncoding;

这里的enc给出了UTF8Encoding,但我期望的是ASCII???

2个回答

3

在查询编码之前,您需要从读取器中读取内容。因此,在调用sr.CurrentEncoding之前,请尝试读取一些内容。StreamReader会查看前几个字节来尝试“猜测”编码,因为ASCII没有BOM,所以可能无法识别它,并且您可能会得到错误的结果。例如,在二进制级别上,ASCII编码文件和ISO-8859-1编码文件之间没有区别。


好的,但是那种方式也会返回相同的编码类型。 - PawanS

1

答案可能在这里

每个有效的ASCII字符也是一个具有相同二进制值的有效UTF-8编码Unicode字符。

换句话说,你的ASCII文件既是有效的UTF-8,也是ASCII。它被检测为UTF-8。


如果正确的话,ASCII 应该是毫无价值的... 可能是正确的吗?但是如果我将其保存为 ASCII,为什么它会返回 UTF8 呢...? - PawanS
ASCII适用于UTF8,但反之不成立。UTF8与ASCII并不相同。由于ASCII也与UTF8兼容,因此您会得到UTF8。 - Jaapjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接