Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用带有ANSI编码的StreamWriter写入文件';行不通_C#_Encoding_Streamwriter_Ansi - Fatal编程技术网

C#使用带有ANSI编码的StreamWriter写入文件';行不通

C#使用带有ANSI编码的StreamWriter写入文件';行不通,c#,encoding,streamwriter,ansi,C#,Encoding,Streamwriter,Ansi,我想用ANSI编码写入文本文件。代码如下所示: string text = "abc123"; string filePath = "C:\\Data\\MyFile.csv"; using (StreamWriter sw = new StreamWriter(File.Open(filePath, FileMode.OpenOrCreate), Encoding.Default)) { sw.Write(text); } 当我用记事本++打开结果文件并点击菜单上的“编码”按钮时,

我想用ANSI编码写入文本文件。代码如下所示:

string text = "abc123";
string filePath = "C:\\Data\\MyFile.csv";

using (StreamWriter sw = new StreamWriter(File.Open(filePath, FileMode.OpenOrCreate), Encoding.Default))
{
    sw.Write(text);
}
当我用记事本++打开结果文件并点击菜单上的“编码”按钮时,总是会出现我想要避免的“UTF-8(无BOM)”。 我试图选择“转换为ANSI”选项,但在保存文件并重新打开后,仍然是“UTF-8”


我被这个问题困扰了很长时间,有人能给我一些提示吗

StreamWriter没有问题,这是记事本++的工作方式。你自己可以很容易地看到它。只需打开经典的windows记事本,键入带有ANSI编码的“测试”和“另存为”。然后在记事本++中打开-它将识别编码为UTF8。

如果导出包含特殊字符的文本,例如“é”,则记事本++将显示编码为ANSI而不是UTF-8

string text = "éçë";

对于ANSI字符,这些字符完全相同。您实际上没有问题(除了使用ANSI;您应该使用UTF8)。根本不清楚是否有任何问题。我的猜测是所有的文本都是ASCII-记事本++基本上只是猜测编码,UTF-8是一个完全合理的猜测。使用经典记事本。它的“另存为”对话框中还有编码选项,您可以使用该选项进行检查。或者更好,使用二进制查看器(例如VisualStudio的集成查看器)查看文件中是否存在任何多字节字符、字节顺序标记等<代码>编码。默认值取决于
GetACP
,在其他计算机上可能有所不同。如果您想确定,请选择一个特定的ANSI代码页。那么为什么要使用Encoding.Default而不是Encoding.ASCII或Encoding.GetEncoding(“windows-1252”);这并不完全正确。只要您只使用英语中使用的字符,您关于Notepadd++识别的陈述是正确的。但是,只要您使用不同语言的字符(例如,
ä
ä
),记事本++就会将文件识别为ANSI,如果您选择UTF-8,“特殊”字符将显示为不可打印字符。真正的问题是选择默认编码。