我正在尝试将两个文本文件保存在ANSI编码中,以供遗留系统稍后处理。但是,当我用正确的编码保存它时,它仍然保存为一个UTF-8文件.
我试过以下几种方法:
File.WriteAllLines(filePath, lines, Encoding.GetEncoding(1252));
File.WriteAllLines(filePath, lines, Encoding.GetEncoding("windows-1252"));using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.GetEncoding(1252)))
{
foreach (string line in lines)
{
writer.WriteLine(line);
}
}我还尝试将现有的utf-8文件转换为ansi。
File.WriteAllBytes(fileName, Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(1252), File.ReadAllBytes(fileName)));上述解决方案都没有奏效,它们仍然是UTF-8。我成功地将其保存为ANSI的唯一方法是插入瑞典字符,例如,这是一个我不能用于其中一个文件的黑客。
我不知所措。有人找到解决这个问题的办法了吗?
我们使用的是.NET框架4.5,C# 7.3
发布于 2020-03-03 10:31:34
我做了一次彻底的调查,发现它起作用了,只是不像我想象的那样。正如@jdweng所说:数据中没有任何内容包含编码,您只是在保存字节。在大多数情况下,您保存的是常规的ASCII字符,因此当您打开Notepad++读取它时,它将默认为它喜欢的任何编码,除非您有一个特殊字符提示要使用的编码程序。
I encoded a file in four encodings (default (UTF-8), ANSI, ASCII and UTF-8-BOM) and opened up all files in a hex editor发现,在大多数情况下,这些文件中的ä决定了在Notepad++中使用哪个解码器。
因此,如果遗留系统使用ANSI解码器,则应该能够打开"ANSI“编码文件,而不需要特殊字符。尽管如此,它还是以UTF-8的形式出现在Notepad++上。
发布于 2020-03-03 10:23:06
这肯定管用。尝试以下程序:
using System.IO;
using System.Text;
namespace Demo
{
static class Program
{
static void Main()
{
string filePath = @"E:\tmp\test"; // Put your path here.
string[] lines = { "ÿ" };
File.WriteAllLines(filePath + ".1.bin", lines, Encoding.GetEncoding(1252));
File.WriteAllLines(filePath + ".2.bin", lines);
}
}
}运行程序,然后检查二进制编辑器中文件的内容。
你将看到以下情况:
test.1.bin contains: FF 0D 0A
test.2.bin contains: 0C BF 0D 0A(注意:如果将".bin“文件拖放到中,它将以二进制模式打开它。)
https://stackoverflow.com/questions/60504655
复制相似问题