Отсутствует метка порядка байт в Юникоде.

hanko_nikita
Дата: 16.06.2014 10:52:42
Доброе утро! Пытаюсь прочесть xml

XmlTextReader reader = new XmlTextReader(@"F:\Release\in\20140611\59.100");

while (reader.Read())
{
...
}


Сам файл выглядит так:

<?xml version="1.0" encoding="utf-16"?>
<eventStatusResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" fpmlVersion="5-0" actualBuild="4" xmlns="http://www.nprts.ru/repository/fpml-5.4">
  <header>
    <messageId>0</messageId>
    <inReplyTo>533928</inReplyTo>
    <sentBy>SPB01</sentBy>
    <sendTo>VICAR</sendTo>
    <creationTimestamp>2014-06-11T16:38:10.2529632+04:00</creationTimestamp>
  </header>
  <statusItem xsi:type="EventStatusItemNsd">
    <eventIdentifier>
      <tradeIdentifier id="">
        <tradeId>352301</tradeId>
        <partyReference href="Party1" />
      </tradeIdentifier>
    </eventIdentifier>
    <status>REGISTERED_FOR_NETTING</status>
    <confirmationParty href="ReporterParty" />
  </statusItem>
  <party id="Party1">
    <partyId>VICAR</partyId>
    <partyName>test</partyName>
  </party>
  <party id="Party2">
    <partyId>VICAR</partyId>
    <partyName>test</partyName>
  </party>
</eventStatusResponse>


Кодировка файла UTF-8 w/o BOM, если поменять encoding на UTF-8, то все читается хорошо, иначе ошибка в теме. Как выйти из ситуации? Какие есть варианты? Заранее спасибо!
Изопропил
Дата: 16.06.2014 11:10:01
hanko_nikita,

получить корректный файл(в бубен автору надавать)
чтоб реальная кодировка файла соответствовала декларации
Нахлобуч
Дата: 16.06.2014 11:45:32
Топорный способ -- string.Replace()
hanko_nikita
Дата: 16.06.2014 12:09:01
Нахлобуч,

Так и решил эту проблему, надеюсь временно, плюс написал источнику файла...
Сон Веры Павловны
Дата: 16.06.2014 13:54:44
hanko_nikita,

Можно сделать изящнее - прочитать файл в стринг, потом ридером читать из стринга:
string xdata;
using (var fs = new FileStream(@"F:\Release\in\20140611\59.100", FileMode.Open))
using(var sr = new StreamReader(fs))
  xdata = sr.ReadToEnd();
using(var sr = new StringReader(xdata))
using(var xr = new XmlTextReader(sr))
  while(xr.Read())
  {
    ...
  }
hanko_nikita
Дата: 16.06.2014 15:41:24
Сон Веры Павловны,

Спасибо за изящное решение) все работает! А как можно реализовать подобный алгоритм, только прочитать не из файла, а из byte[]
Изопропил
Дата: 16.06.2014 15:57:20
hanko_nikita,

Encoding.GetEncoding("UTF-8").GetString(b)

или
new StreamReader(new MemoryStream(b), Encoding.GetEncoding("UTF-8"));
hanko_nikita
Дата: 16.06.2014 16:27:51
Изопропил,

спасибо, реализовал