Как разархивировать XML-файл, не переводя специальные символы в масках? - PullRequest
0 голосов
/ 25 сентября 2018

Поле в xml-файле заполнено "O'Neill", что переводится как "O'Neill".Но из-за законодательных ограничений нам не разрешается изменять данную информацию, поэтому мы вынуждены прекратить перевод.Прямо сейчас мы используем JAXB, чтобы распаковать файл.Но как только это будет сделано, данный объект будет переведен как O'Neill.Нам не удалось найти способ запретить переводчику unmarshaller.

    JAXBContext jaxbContext = JAXBContext.newInstance(clazz.getPackage().getName());
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    Reader reader = Files.newBufferedReader(xmlFile, Charset.forName(codepage));
    Object result = unmarshaller.unmarshal(reader);

Я нашел несколько подсказок для CharacterEscapeHandler, но, похоже, это работает только для маршаллера, а не для явного демаршаллера.Кодировка необходима, так как мы обязаны проверять правильность кодировки.Один читатель ничего не делает.Мы проверили и "O'Neill" был прочитан из файла.Кодовая страница XML является кодовой страницей ISO-8859-15.Критическая линия определена последней.Читатель читает его правильно, после того, как значение unmarshalling переведено.(Рассматривается в отладчике).

Если кто-нибудь знает способ получить неизмененный «O'Neill» в объекте, либо с помощью JAXB, либо другим способом, каждая подсказка приветствуется.(Мы используем схемы XSD для демаршалирования в объект.)

1 Ответ

0 голосов
/ 25 сентября 2018

O'Neil юридически корректно: from-xml(to-xml("O'Neil")) == "O'Neil".

Когда в XML было введено "O'Neil", оно было преобразовано в "O'Neil", поскольку апостроф - это специальный символ в XML.

ASCII 39 - это апостроф ', так что это не так, как если бы ноль 0 был изменен на заглавную O. Я бы даже сказал, что форма с ' искажает исходную O'Neil.

Если вам все еще нужно это сделать:

Поскольку возможно несколько форм для этих сущностей: ' ' ', повторное экранирование, например StringEscapeUtils.escapeXML(...), также не будет выполняться.

Вам понадобитсяперехватить обработку объекта и перевести на исходный текст как есть.

Для обсуждения, аргументации.Обратите внимание, что кодировка XML, скажем, UTF-8 влияет на байты.Если они содержат акцентированную букву, такую ​​как é, преобразование в некоторую кодировку Windows также должно привести к читаемому символу é, а не двум странным символам (последний не преобразует эти байты для é).

...