使用C#指定ISO-8859-1编码写文件却显示为UTF-8的问题求助
问题原因及解决建议
你的代码其实确实是用ISO-8859-1编码写入文件的,Notepad++显示UTF-8是因为以下两点:
- 你写入的内容全是ASCII字符(a-z、空格这类),而ASCII是ISO-8859-1和UTF-8的共同子集,两种编码对这些字符的字节表示完全一致(都是单字节,数值相同)。
- 你没有写入BOM(字节顺序标记),而UTF-8的默认识别逻辑里,纯ASCII内容会被优先判定为UTF-8。
验证及解决方法
- 写入非ASCII的Latin1字符:修改代码里的写入内容,加入一个ISO-8859-1范围内的非ASCII字符(比如
é),这样文件里就会出现0xE9这个字节,Notepad++就能正确识别为ISO-8859-1了。修改后的代码示例:
private void button1_Click(object sender, EventArgs e) { string file = @"C:\Temp\test.txt"; if (File.Exists(file)) { File.Delete(file); } using (StreamWriter sw = new StreamWriter(file, false, Encoding.GetEncoding("iso-8859-1"))) { // 加入é这个Latin1字符 sw.Write("test1 test2 test3 é"); sw.Flush(); } }
- 手动切换Notepad++编码查看:如果只需要确认编码,不用修改内容的话,可以在Notepad++菜单栏点击「编码」->「字符集」->「西欧」->「ISO-8859-1」,此时编辑器会正确显示文件的编码类型(虽然内容显示和UTF-8一致,但编码标识会更新)。
内容的提问来源于stack exchange,提问作者Tobias G.
相关产品推荐
相关产品推荐

