Как вы упомянули, вам нужно знать кодировку файла для чтения атрибута encoding
.
Однако есть эвристика, которая может легко приблизить вас к «реальному»кодирование, чтобы вы могли прочитать атрибут кодирования.Это работает, потому что <?xml
часть по определению может содержать только символы в диапазоне ASCII (однако они закодированы).
Стандарт XML даже описывает точный процесс, используемый для определения кодировки .
И метка кодирования тоже не избыточна.Например, если вы используете алгоритм в спецификации XML, чтобы узнать, что используется какая-то кодировка на основе ASCII (или ASCII-совместимая), вам все же необходимо прочитать кодировку, чтобы выяснить, какая из них на самом деле используется(действительными кандидатами могут быть ASCII, UTF-8, любая из кодировок ISO-8859- * , любая из кодировок Windows - *, KOI8-R и многие, многие другие).Для самой части <?xml
это не будет иметь значения, какая она есть, но для остальной части документа это может иметь огромное значение.
Относительно неправильно помеченных файлов XML: да, этоих легко создать, однако : спецификация XML четко указывает, что эти файлы сформированы неправильно и, как таковые, не являются корректными XML.О неправильных кодировках следует сообщать как об ошибках (если они могут быть обнаружены!).Так что проблема в том, кто производит XML.