UTF-8文件数据到ANSII

我有UTF-8文件(瑞典语charactersåö字符)。 我把它们看作:

List myDataList = new List(); 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? 谢谢。

可能所说的“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写为Windows 1252 ,即

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

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

从历史上看,Windows中使用短语“ANSI代码页”(ACP)来引用被视为本机的各种代码页。 其目的是大多数都是ANSI标准,如ISO-8859-1。 尽管Windows-1252是第一个也是迄今为止最受欢迎的代码页,在Microsoft Windows的说法中这样命名,但代码页从未成为ANSI标准。 微软附属博客现在声称“用于表示Windows代码页的术语ANSI是一个历史参考,但现在仍然是在Windows社区中持续存在的误称。”

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

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

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