Как изменить кодировку символов XmlReader

Важным аргументом здесь является то, что использование psr-4 или psr-0 в composer.json вынуждает организовывать файлы классов в соответствии со строгим стандартом. Это позволяет другим (или вам самим через 2 года), которые смотрят на composer.json, сразу узнать, где находятся ваши классы.

Если вы делаете это неправильно, например, если вы ошиблись в написании пространства имен, вы, скорее всего, узнаете об этом во время разработки или в своих модульных тестах из-за «класса не найден». Это хорошо, потому что заставляет вас это исправить.

Карта классов намного более простительна и позволит любую произвольную организацию файлов классов, оставляя читателя в неведении.

Итак, как уже говорили другие: используйте psr-4 или psr-0 в composer.json, работайте с этим во время разработки, а затем рассмотрите опцию -o для производства. Но оцените, действительно ли это приносит выигрыш в производительности!

21
задан dstr 7 June 2009 в 10:58
поделиться

3 ответа

Чтобы заставить .NET читать файл как ISO-8859-9, просто используйте одну из многих перегрузок XmlReader.Create, например

using(XmlReader r = XmlReader.Create(new StreamReader(fileName, Encoding.GetEncoding("ISO-8859-9")))) {
    while(r.Read()) {
        Console.WriteLine(r.Value);
    }
}

Однако это может не сработать, потому что IIRC стандарт W3C XML говорит что-то о том, что когда строка объявления XML была прочитана, совместимый синтаксический анализатор должен немедленно переключиться на кодировку, указанную в объявлении XML, независимо от того, какую кодировку он использовал раньше. В вашем случае, если XML-файл не имеет декларации XML, кодировка будет UTF-8, и она все равно завершится ошибкой. Возможно, я говорю чепуху, так что попробуйте и убедитесь. : -)

35
ответ дан 29 November 2019 в 20:35
поделиться

Класс XmlTextReader (это то, что статический метод Create фактически возвращается, поскольку XmlReader является абстрактным базовым классом) предназначен для автоматического определения кодировки из самого файла XML - нет возможности установить его вручную.

Просто убедитесь, что вы включили следующее объявление XML в файле, который вы читаете:

<?xml version="1.0" encoding="ISO-8859-9"?>
4
ответ дан 29 November 2019 в 20:35
поделиться

Если вы не можете гарантировать, что входной файл имеет правильный заголовок, вы можете посмотреть одну из других 11 перегрузок метода XmlReader.Create.

Некоторые из них принимают переменную XmlReaderSettings или XmlParserContext , либо обе. Я не исследовал их, но есть вероятность, что здесь может помочь установка подходящих значений.

Существует свойство XmlReaderSettings.CheckCharacters - справка для этого состояния:

Дает указание читателю проверить символы и бросить исключение, если какие-либо символы находятся за пределами допустимого диапазона символов XML. Проверка символов включает проверку на наличие недопустимых символов в документе, а также проверку допустимости имен XML (например, имя XML не может начинаться с цифры).

Поэтому установка значения false может помочь. Однако в справке также указано:

Если XmlReader обрабатывает текстовые данные, он всегда проверяет правильность имен XML и текстового содержимого, независимо от настройки свойства. Установка CheckCharacters на false отключает проверку символов для ссылок на символьные сущности.

Таким образом, дальнейшее расследование необходимо.

2
ответ дан 29 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: