C# StreamWriter编码字符串不正确

C# StreamWriter编码字符串不正确,c#,string,file-io,character-encoding,streamwriter,C#,String,File Io,Character Encoding,Streamwriter,我正在尝试将base64字符串附加到现有文件。这是我的密码: StreamWriter output = new StreamWriter(file, true, Encoding.ASCII); output.WriteLine(output.NewLine + str); 这里的file是文件路径 出于某种原因,有一个特定的文件(一个.cs文件,如果有必要的话),其中附加的实际文本是一个汉字字符串。它对我测试过的所有其他文件都能正常工作。根据注释中的多个建议,我用文件的编码替换了Encod

我正在尝试将base64字符串附加到现有文件。这是我的密码:

StreamWriter output = new StreamWriter(file, true, Encoding.ASCII);
output.WriteLine(output.NewLine + str);
这里的
file
是文件路径


出于某种原因,有一个特定的文件(一个.cs文件,如果有必要的话),其中附加的实际文本是一个汉字字符串。它对我测试过的所有其他文件都能正常工作。

根据注释中的多个建议,我用文件的编码替换了
Encoding.ASCII
,我使用2Toad的答案查找该文件。这就解决了问题。

您试图打印的字符串中是否包含任何非ASCII字符?也就是说,十进制值大于127的任何字符?例如,它是否有Unicode字节顺序标记()?在这种情况下,
str
是什么?是否可能是您在不截断的情况下覆盖了现有文件,并且数据仅仅是已经存在的数据?几乎可以肯定,您正在使用错误的(
ASCII
)编码破坏文件。请验证文件不是UTF-8(或其他编码)。您已使用ASCII编码创建了StreamWriter,但您的汉字不是ASCII编码的一部分。您可能希望尝试Unicode编码,或者,更安全的做法是根本不更改文件的编码而损坏文件。如果它不是一个ASCII编码的文件呢?编码可以通过BOM保存到文件中,BOM是一个用于确定文件本身的结尾和编码的标志。如果原始文件包含utf-16 BOM,则会发生这种情况。在Windows计算机上并不少见。