Подтвердить что ты не робот

Как читать текстовые файлы с кодировкой ANSI и неанглийскими буквами?

У меня есть файл, который содержит неанглийские символы и был сохранен в кодировке ANSI с использованием не англоязычной кодовой страницы. Как я могу прочитать этот файл на С# и правильно посмотреть содержимое файла?

Не работает

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();
4b9b3361

Ответ 2

Если я правильно помню, метод XmlDocument.Load(string) всегда принимает UTF-8, независимо от XML-кодировки. Вам нужно будет создать StreamReader с правильным кодированием и использовать его как параметр.

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

Я просто наткнулся на KB308061 от Microsoft. Там интересный отрывок: Укажите объявление кодировки в разделе объявления XML документа XML. Например, следующее объявление указывает, что документ находится в формате кодировки Unicode UTF-16:

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

Обратите внимание, что это объявление определяет только формат кодировки XML-документа и не изменяет или не контролирует фактический формат данных.

Источник ссылки:

Метод XmlDocument.Load() не может декодировать € (евро)

Ответ 3

Вы получаете символы вопросительного знака, когда ваш текстовый файл использует кодировку с высоким 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

Ответ 4

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