Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XmlReader - Byte order mark, There is no Unicode byte order mark 
V
    Опции темы
mihryak
Дата 30.6.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



При попытке чтения из XmlReader'а выбрасывается исключение There is no Unicode byte order mark. Cannot switch to Unicode.
Исключение обоснованное - данные в формате UTF8BOM отсутствует, в декларации документа
Код

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

Пробовал выставить в настройках ридера 
Код

XmlReaderSettings.IgnoreProcessingInstructions = true;
 - безрезультатно
Данные поступают в виде byte[], в ряде случаев в ZGip'ованном формате, предварительно раззиповывать нельзя, как и использоваться DOM (с ним, к слову, всё нормально загружается).

Можно ли как-нибудь настроить XmlReader, чтобы он смог проглатывать мои данные?
И дополнительная проблема - нужно ещё настроить XmlWriter так, чтобы он этот BOM не записывал в начало.
PM MAIL ICQ   Вверх
Idsa
Дата 30.6.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



mihryak, ищите да обрящете: http://www.google.ru/search?q=%22There+is+...lient=firefox-a


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 30.6.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Idsa, я бы приложил скрин моего огнелиса, где все ссылки с первых страниц цвета Visited  smile 
увы, нету там подходящего ответа
проблема не столько в том, как это можно побороть любым способом - тот же DOM решает проблему, считывание декларации и подмена 16 на 8, удаление этой проклятой строки, куча прочих вариантов - но ни один из них не удовлетворяет требованиям
а они просты - отсутствие дополнительных буферов и предварительной раззиповки, т.е. из стрима нужно данные передавать прямо в ридер

ещё такой момент - эта декларация может вообще отсутствовать, поэтому предварительно "вычитать" её тоже не получится :(

Это сообщение отредактировал(а) mihryak - 30.6.2008, 19:42
PM MAIL ICQ   Вверх
altarvic
Дата 1.7.2008, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 2.3.2007

Репутация: 1
Всего: 1



XmlParserContext ?
PM MAIL   Вверх
mihryak
Дата 1.7.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



altarvic, не помог
Encoding оттуда попадает в поле reportedEncoding класса XmlTextReaderImpl, но при первом вызове Read первоначальное значение поля parsingFunction = ParsingFunction.SwitchToInteractiveXmlDecl, что вызывает в свою очередь парсинг декладации и выкидывание исключения
самое забавное, что этот первый парсинг в конце концов приводит к присваиванию reportedEncoding  smile 
PM MAIL ICQ   Вверх
mihryak
Дата 4.7.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



если кому-нибудь интересно - проблема решена с помощью StreamReader'а
т.е. сначала он создаётся на основе Stream'а с заданной кодировкой, а потом передаётся XmlReader
PM MAIL ICQ   Вверх
altarvic
Дата 4.7.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 2.3.2007

Репутация: 1
Всего: 1



т.е BOM вручную прописываешь?
а с XmlWriter'ом решилось?
PM MAIL   Вверх
mihryak
Дата 4.7.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



не-а, не прописываю, как оказалось, XmlReader вполне доверяет StreamReader'у в вопросах кодировки =)
а с XmlWriter'om решилось вообще просто
Код

                    writerSettings = new XmlWriterSettings();
                    writerSettings.Encoding = new UTF8Encoding(false);

false в параметрах как раз отвечает за то, будет ли энкодинг предоставлять BOM
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.