XmlDocument и Encoding
От: Alex.proger  
Дата: 01.08.13 09:48
Оценка:
Подскажите пожалуйста по кодировке.

Ко мне приходят xml'ки, которые я "загружаю" в класс XmlDocument:
XmlDocument xml = new XmlDocument();
xml.Load(fileName);

Иногда они приходят в Win-1251, а иногда в UTF-8.
Как можно прочитав xml ( xml.Load() ), узнать какая кодировка указана в заголовке ( <?xml version="1.0" encoding="UTF-8"?> ) ?
Re: XmlDocument и Encoding
От: VasEug  
Дата: 01.08.13 10:35
Оценка:
Здравствуйте, Alex.proger, Вы писали:

AP>Подскажите пожалуйста по кодировке.


AP>Ко мне приходят xml'ки, которые я "загружаю" в класс XmlDocument:

AP>XmlDocument xml = new XmlDocument();
AP>xml.Load(fileName);

AP>Иногда они приходят в Win-1251, а иногда в UTF-8.

AP>Как можно прочитав xml ( xml.Load() ), узнать какая кодировка указана в заголовке ( <?xml version="1.0" encoding="UTF-8"?> ) ?

Наименование кодировки содержится в элементе XmlDeclaration, который можно получить из элемента XmlDocument.

XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlDeclaration dec = doc.FirstChild as XmlDeclaration;
Encoding enc = dec != null ? Encoding.GetEncoding(dec.Encoding) : null;
Re: XmlDocument и Encoding
От: Mihas  
Дата: 01.08.13 11:09
Оценка:
Здравствуйте, Alex.proger, Вы писали:

AP>Иногда они приходят в Win-1251, а иногда в UTF-8.

AP>Как можно прочитав xml ( xml.Load() ), узнать какая кодировка указана в заголовке ( <?xml version="1.0" encoding="UTF-8"?> ) ?

Если цель не просто узнать кодировку, а прочитать файл, не зная ее заранее, то предлагаю такой вариант. Сперва затянуть содержимое xml в строку:

string str = File.ReadAllText(path, Encoding.Get(1251));


А потом уже из строки получать XmlDocument.
Хитрость вот в чем: если файл придет в UTF-8, то метод ReadAllText, несмотря на явно указанную кодировку 1251, все равно определит UTF-8 и прочитает файл правильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.