MSXML parser and how to determine the encoding of content ?
От: Аноним  
Дата: 24.04.08 17:38
Оценка:
Суть проблемы: разрабатывается ISAPI — filter, который умеет парсать SOAP — content HTTP — запросов и неким образом патчить контент (такой вот хак нужен заказчику ). И всебы отлично, но для правильного пропатчивания нужно знать кодировку, в которой пришел контент. Сейчас кодировка узнается либо из контента путем поиска BOM (Byte-Order-Mark), либо из XML — declaration (<?xml version="1.0" encoding="utf-8"?>) или из элемента charset HTTP — header'а (Content-Type: text/html; charset=Windows-1251).
Как мне кажется, это очень кривой способ узнать кодировку, к томуже он невсегда работает.
Собственно вопрос: КАК SAX — parser вычисляет кодировку если нет XML — declaration и неопределен BOM???

26.04.08 22:32: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: MSXML parser and how to determine the encoding of conten
От: olpa http://xmlhack.ru/
Дата: 28.04.08 02:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как мне кажется, это очень кривой способ узнать кодировку, к томуже он невсегда работает.

А>Собственно вопрос: КАК SAX — parser вычисляет кодировку если нет XML — declaration и неопределен BOM???

Скорее всего, он использует кодировку по умолчанию: utf-8.
MustRead.ru
Re: MSXML parser and how to determine the encoding of conten
От: Аноним931 Германия  
Дата: 28.04.08 19:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: КАК SAX — parser вычисляет кодировку если нет XML — declaration и неопределен BOM???


Прежде всего, сам вопрос непонятно сформулирован. Что именно спрашивается:
а) как некий конкретный парсер некой конкретной версии (например, названный тобой MSXML) устанавливает кодировку
или
б) как парсеры вообще теоретически могут вычислять кодировку?

На (а) я ответа не знаю, на (б): тут простор для полета фантазии безграничен. Например, парсер знает, что XML-файл всегда начинается на символ "меньше" и заканчивается сибволом "больше", соответсвенно можно последовательно сравнивать значение первого и последнего байтов входного файла с имеющимися таблицами кодировок (это просто пример!!! и я прекрасно знаю, что коды данных символов в двух или более кодировках могут быть одинаковы!!!).
Но успех данного предприятия, понятное дело, в общем случае не 100%. Иначе пункта меню "Кодировка" не было бы в браузерах, а в XML не было бы объявления encoding
"Больше 100кмч можно ехать на автобане в любом ряду кроме правого крайнего" (c) pik
"В германии земля в частной собственности" (c) pik
"Закрывать школы, при нулевой смертности среди детей и подростков, это верх глупости" (c) Abalak
Re: MSXML parser and how to determine the encoding of conten
От: vmpire Россия  
Дата: 29.04.08 11:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Суть проблемы: разрабатывается ISAPI — filter, который умеет парсать SOAP — content HTTP — запросов и неким образом патчить контент (такой вот хак нужен заказчику ). И всебы отлично, но для правильного пропатчивания нужно знать кодировку, в которой пришел контент. Сейчас кодировка узнается либо из контента путем поиска BOM (Byte-Order-Mark), либо из XML — declaration (<?xml version="1.0" encoding="utf-8"?>) или из элемента charset HTTP — header'а (Content-Type: text/html; charset=Windows-1251).

А>Как мне кажется, это очень кривой способ узнать кодировку, к томуже он невсегда работает.
А>Собственно вопрос: КАК SAX — parser вычисляет кодировку если нет XML — declaration и неопределен BOM???

В этом случае он, согласно стандврту, должен использовать UTF-8.
В стандарте описана логика определения кодировки для разных случаев
http://www.w3.org/TR/REC-xml/#sec-guessing

Открытым остаётся вопрос, имееи ли Content-Type приоритет перед стандартом при разборе документа.
Можно попробовать это проверить экспереиментально.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.