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

时间:2013-06-24 07:12:55

标签: c#

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

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?感谢。

2 个答案:

答案 0 :(得分:6)

你可能的意思是“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 < / em>和写为Windows 1252 ,即

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

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

  

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

答案 1 :(得分:1)

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

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

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