UTF-8将数据文件转换为ANSII

本文关键字:ANSII 转换 文件 数据 UTF-8 | 更新日期: 2023-09-27 18:19:42

我有UTF-8文件(使用瑞典语字符)。我把它们读成:

List<MyData> myDataList = new List<MyData>();
string[] allLines = File.ReadAllLines(csvFile[0], Encoding.Default);
foreach (string line in allLines)
{
  MyData myData = new MyData();
  string[] words = line.Split(";");
  myData.ID = words[0];
  myData.Name = word[1];
  myData.Age = words[2];
  myData.Date = words[3];
  myData.Score = words[4];
  //Do something...
  myDataList.Add(myData);
}
StringBuilder sb = new StringBuilder();
foreach (string data in myDataList)
{
   sb.AppendLine(string.Format("{0},{1},{2},{3},{4}",
       data.ID,
       data.Name,
       data.Age,
       data.Date,
       data.Score));
}       
File.WriteAllText("output.txt", sb.ToString(), Encoding.ASCII);

我得到了ansii格式的output.txt文件,但没有瑞典语字符。有人能帮我知道如何将文件数据从UTF-8保存到Ansii吗?谢谢

UTF-8将数据文件转换为ANSII

所说的"ANSII"的意思可能是是大多数西欧国家使用的代码页Windows-1252。

目前,您正在读取系统默认编码的文件,可能是Windows-1252,并将其写成ASCII,它只定义前128个字符,不包括任何非英语字符(如äåö):

string[] allLines = File.ReadAllLines(csvFile[0], Encoding.Default);
...
File.WriteAllText("output.txt", sb.ToString(), Encoding.ASCII);

这两者都错了如果要将文件从UTF-8转换为Windows-1252,则需要读取为UTF-8写入为Windows1252(即)

string[] allLines = File.ReadAllLines(csvFile[0], Encoding.UTF8);
...
File.WriteAllText("output.txt", sb.ToString(), new Encoding(1252));

cco拼写为ANSI;但即使这样也不完全正确(引用维基百科):

从历史上看,短语"ANSI代码页"(ACP)在Windows中用于指代被认为是本机的各种代码页。其意图是,其中大多数将是ANSI标准,如ISO-8859-1。尽管Windows-1252是第一个也是迄今为止最受欢迎的代码页,用微软Windows的说法命名,但代码页从来都不是ANSI标准。微软旗下的博客作者现在表示,"用于表示Windows代码页的ANSI一词是一个历史参考,但如今在Windows社区中仍然存在着一个用词不当的现象。"

目前您正在用ASCII编写文件,ASCII非常有限,无法显示那些"swedish"字符。我建议试试这个:

System.IO.File.WriteAllText(path, text, Encoding.GetEncoding(28603));

这将使用代码页Latin-4以ANSI编码写入文件。我推荐你维基百科上的文章:ISO 8859