Ответ 1
var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));
Список кодовых страниц: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
У меня есть файл, который содержит неанглийские символы и был сохранен в кодировке 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();
var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));
Список кодовых страниц: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
Если я правильно помню, метод 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-документа и не изменяет или не контролирует фактический формат данных.
Источник ссылки:
Вы получаете символы вопросительного знака, когда ваш текстовый файл использует кодировку с высоким 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
using (StreamWriter writer = new StreamWriter(File.Open(@"E:\Sample.txt", FileMode.Append), Encoding.GetEncoding(1250))) ////File.Create(path)
{
writer.Write("Sample Text");
}