Я работаю над некоторым кодом, чтобы определить кодировку символов документа XML, возвращаемого веб-сервером (в данном конкретном случае - RSS-канал). К сожалению, иногда веб-сервер лжет и сообщает мне, что документ является UTF-8, хотя на самом деле это не так, или код генерации стандартного XML-кода на сервере имеет <?xml encoding='UTF-8'?>
в начале, но документ содержит недопустимые последовательности байтов UTF-8.
Поскольку у меня нет контроля над сервером, мне нужно заставить свой клиентский код переносить такого рода несоответствия и показывать что-то , даже если некоторые символы не были правильно декодированы. Это важное требование для моего заявления.
Мне хорошо известно, что в этом случае сервер нарушает спецификацию XML. Я пытаюсь поработать с разработчиками на стороне сервера, когда это возможно, чтобы все было корректно в соответствии со спецификацией, но иногда это является низким приоритетом для них или для их организации, или код на стороне сервера никем не поддерживается активно.
Чтобы быть устойчивым, я хочу взглянуть на первые несколько байтов данных XML и попытаться определить, является ли это какой-либо формой UTF-16 или какой-либо 8-битной кодировкой. У меня уже есть код, который ищет метку порядка байтов (* BOM).
Но иногда на сервере отсутствует спецификация, даже для UTF-16. Я хочу попытаться выяснить, является ли это UTF-16 или нет, посмотрев на первые два байта и проверив их по списку возможных первых символов в документе XML.
Очевидно, я должен где-то нарисовать линию. Если документ не является правильно сформированным XML, я все равно не смогу его проанализировать, если не напишу свой собственный очень терпимый синтаксический анализатор (что я не планирую делать). Но, учитывая, что он правильно сформирован, что я мог видеть в первом символе документа, кроме спецификации?
Насколько я могу судить по просмотру спецификации, этот набор будет следующим: пробел (пробел, табуляция, новая строка, возврат каретки) и '<'. Знают ли какие-нибудь эксперты по XML о чем-то, чего мне не хватает? Я должен предположить, что декларация <code><?xml?> может отсутствовать, даже если этого требует спецификация.
Внутренние DTD, инструкции по обработке, теги и комментарии начинаются с '<'. Возможно ли иметь сущность (начиная с '&') или что-то еще в начале документа? </p>
РЕДАКТИРОВАТЬ: переписать, чтобы подчеркнуть мои конкретные требования.