使用C#将文本文件从ANSI转换为ASCII

时间:2009-04-09 11:50:58

标签: c# encoding character-encoding ascii

我有一个ANSI编码的文件,我想将我从文件中读取的行转换为ASCII。

如何在C#中执行此操作?


编辑:如果我使用“BinaryReader”怎么办? BinaryReader reader = new BinaryReader(input, Encoding.Default); 但是这个读者需要(流,编码) 但“流”是一个抽象!我应该把文件的路径放在哪里?

2 个答案:

答案 0 :(得分:30)

从ANSI到ASCII的直接转换可能并非总是可行,因为ANSI是ASCII的超集。

您可以尝试使用Encoding转换为UTF-8,但是:

Encoding ANSI = Encoding.GetEncoding(1252);

byte[] ansiBytes = ANSI.GetBytes(str);
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);

String utf8String = Encoding.UTF8.GetString(utf8Bytes);

当然你可以用ASCII替换UTF8,但是从那以后就没有用了:

  • 如果原始字符串不包含任何字节> 126,然后它已经是ASCII
  • 如果原始字符串确实包含一个或多个字节> 126,然后那些字节将丢失

<强>更新

在回答更新后的问题时,您可以像这样使用BinaryReader

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
                                       Encoding.GetEncoding(1252));

答案 1 :(得分:23)

基本上,您需要在读/写文件时指定Encoding。例如:

// read with the **local** system default ANSI page
string text = File.ReadAllText(path, Encoding.Default); 

// ** I'm not sure you need to do this next bit - it sounds like
//  you just want to read it? **

// write as ASCII (if you want to do this)
File.WriteAllText(path2, text, Encoding.ASCII);

请注意,一旦你阅读了它,text实际上是在内存中的unicode。

您可以使用Encoding.GetEncoding选择不同的代码页。