2

I have UTF-8 files (with Swedish äåö characters). I read those as:

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);

I get output.txt file in ansii but not with Swedish characters. Can someone help me to know how can I save file data from UTF-8 to Ansii? Thanks.

4

2 回答 2

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写入为 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 社区中仍然是一个误称。”</p>

于 2013-06-24T07:18:24.943 回答
1

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

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

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

于 2013-06-24T07:19:55.680 回答