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

19
我有一个使用ANSI编码的文件,想要将从文件中读取的文本转换为ASCII编码。在C#中应该如何实现?
编辑:如果我使用"BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); 但是这个reader需要(Stream, Encoding)作为参数,而"Stream"是一个抽象类!那么我应该把要读取的文件路径放在哪里呢?

为什么您想将它转换为ASCII码?这个问题的答案可能会揭示出您实际需要将它转换成什么… - Guffa
2个回答

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

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选择不同的代码页。


好的回答,特别是指出您可以使用静态文件方法,而不需要直接涉及FileStream或缓冲区。 - Noldorin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接