Как обнаружить «Недопустимый символ в текстовом содержимом» - PullRequest
0 голосов
/ 15 февраля 2011

Я делаю проверку XML в Java, используя SAX, и я хотел бы распознать следующий тип ошибки: «В текстовом содержимом обнаружен недопустимый символ».

В данный момент,У меня есть проверка с SAX, и для некоторых документов у меня есть поврежденные символы, не обнаруженные как ошибки.Когда я пытаюсь открыть полученный XML-файл с помощью браузера IE, например, я получаю сообщение об ошибке «В текстовом содержимом обнаружен недопустимый символ».

Это пример данных XML:

<?xml version='1.0' encoding='UTF-8' standalone='yes'>
<!DOCTYPE blabla SYSTEM 'blabla.dtd'>
<blabla type='type' num='num'>
<...>... corrupted character </...>
</blabla>

И это пример экземпляра синтаксического анализатора:

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);

parser = factory.newSAXParser();
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
parser.setProperty(JAXP_SCHEMA_SOURCE, new File(theConfig.getRoot()
        .concat(File.separator).concat(theConfig.getXsdFileName())
        .concat("-v").concat(theConfig.getXsdFileVersion()).concat(
                        XSD_EXTENSION)));
reader = parser.getXMLReader();
reader.setErrorHandler(getHandler());
reader.setEntityResolver(new MyEntityResolver(theConfig.getRoot(),
                theConfig));
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(theDataToParse));
reader.parse(is);

В обработчике ошибок реализованы методы 'warning', 'error' и 'fatalError', но ничего не обнаружено.Средство распознавания сущностей позволяет вести файл сущности обычного пользователя, хранящийся в каталоге конфигурации.

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

Заранее благодарен за помощь.

С уважением.

1 Ответ

0 голосов
/ 15 февраля 2011

да, по-видимому, вы уже выполнили преобразование байта в символ, поскольку уже удерживаете строку. если вы хотите обнаружить недопустимый символ, вам нужно проанализировать байты. в общем случае нехорошо хранить данные XML в виде строковых данных, так как вы рискуете испортить их из-за неправильной кодировки символов. лучший способ обработать xml - это двоичные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...