如何阅读ANSI编码和非英文字母的文本文件?

时间:2012-08-26 12:55:11

标签: c# .net unicode utf-8 character-encoding

我有一个包含非英语字符的文件,并使用非英语代码页以ANSI编码保存。如何在C#中读取此文件并正确查看文件内容?

不工作

StreamReader sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.ASCII);
var ags = sr.ReadToEnd();
sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.UTF8);
ags = sr.ReadToEnd();
sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.Unicode);
ags = sr.ReadToEnd();

工作但我需要提前知道代码页是什么,这是不可能的。

sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.GetEncoding(1252));
ags = sr.ReadToEnd();

5 个答案:

答案 0 :(得分:60)

 var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));

代码页列表:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

答案 1 :(得分:2)

如果我没记错,XmlDocument.Load(string)方法总是假定UTF-8,无论XML编码如何。 您必须使用正确的编码创建StreamReader并将其用作参数。

xmlDoc.Load(new StreamReader(
                     File.Open("file.xml"), 
                     Encoding.GetEncoding("iso-8859-15"))); 

我偶然发现了微软的KB308061。有一个有趣的段落: 在XML文档的XML声明部分中指定编码声明。例如,以下声明表明该文档采用UTF-16 Unicode编码格式:

<?xml version="1.0" encoding="UTF-16"?>

请注意,此声明仅指定XML文档的编码格式,不会修改或控制数据的实际编码格式。

链接来源:

XmlDocument.Load() method fails to decode € (euro)

答案 2 :(得分:2)

当您的文本文件使用高ANSI编码时,您会得到问号 - 菱形字符 - 这意味着它使用127到255之间的字符。这些字符具有第八个(即最重要的)位集。当ASP.NET读取文本文件时,它采用UTF-8编码,并且最重要的位具有特殊含义。

您必须强制ASP.NET将文本文件解释为高ANSI编码,告诉它代码页是1252:

String textFilePhysicalPath = System.Web.HttpContext.Current.Server.MapPath("~/textfiles/MyInputFile.txt");
String contents = File.ReadAllText(textFilePhysicalPath, System.Text.Encoding.GetEncoding(1252));
lblContents.Text = contents.Replace("\n", "<br />");  // change linebreaks to HTML

答案 3 :(得分:0)

在我的 c++/clr (WinForms) 案例中,这种方法取得了成功:

String^ str2 = File::ReadAllText("MyText_cyrillic.txt",System::Text::Encoding::GetEncoding(1251)); 
textBox1->Text = str2;   

答案 4 :(得分:-1)

using (StreamWriter writer = new StreamWriter(File.Open(@"E:\Sample.txt", FileMode.Append), Encoding.GetEncoding(1250)))  ////File.Create(path)
        {
            writer.Write("Sample Text");
        }