Проблема -> На самом деле я столкнулся с проблемой анализа XML (SAX Parser) в Unix Machine. Same Jar/Java-Code ведет себя по-разному на Windows и Unix Machine, почему? :(XML Parser ведет себя по-разному на машине Unix только для огромного/большого xml-файла. Тот же код отлично работает в окнах. ЗАЧЕМ?
машинаWindows -> отлично работает, используя SAX Parser загрузить огромный файл XML, Почитаю все значения правильно и заполнить одинаковые значения Charset.defaultCharset() окна-1252
Unix машина -.> После затем создал JAR и развернул в Unix -> tomcat и выполнил банку. Пытался загрузить тот же огромный XML-файл. Но заметил, что некоторые значения или символы заполнены пустым или неполным, например Название страны, заполненное как «ysia», а не «Malaysia», или транзакция Дата заселения как «3 PM» вместо «18/09/2016 03:31:23 PM». Charset.defaultCharset() UTF-8
Проблема только с Unix, потому что когда я загружаю один и тот же xml в windows или в локальное eclipse, он отлично работает, и все значения заполняются правильно.
Также я попытался изменить свой код и установить кодировку как UTF-8 для inputSteamReader, но все же он неверно читается в unix-блоке.
Примечание: в xml нет специальных символов. Также заметили одно: когда я беру те же записи (эти значения не заполнены правильно) в другом файле xml и загружаются в unix-машине с тем же банком, он отлично работает. Это означает, что возникают проблемы при загрузке этих записей с огромными данными. :(
Код установки:
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();
InputStream inputStream= new FileInputStream(inputFilePath);
Reader reader = new InputStreamReader(inputStream,"UTF-8");
InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");
saxParser.parse(is,(DefaultHandler) handler);
} catch(Exception ex){
ex.printStackTrace();
}
Обработчики:
public void characters(char[] ac, int i, int j) throws SAXException {
chars.append(ac, i, j);
tmpValue = new String(ac, i, j).trim();
}
public void endElement(String s, String s1, String element) throws SAXException {
if (element.equalsIgnoreCase("transactionDate")) {
obj.setTransactionDate(tmpValue);
}
}
Пожалуйста, предложить, что должно быть решение
Можете ли вы показать код, который читает XML? Случайное предположение ожидало бы {InputStream | Reader} .read(), чтобы прочитать заданное количество символов - вместо проверки возвращаемого значения ... –
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); \t \t try { \t \t SAXParser saxParser = saxParserFactory.newSAXParser(); \t \t InputStream inputStream = new FileInputStream (inputFilePath); \t \t Считыватель чтения = новый InputStreamReader (inputStream, «UTF-8»); \t \t InputSource is = new InputSource (reader); \t \t is.setEncoding ("UTF-8"); \t \t saxParser.parse (есть, (DefaultHandler) обработчик); \t \t} catch (Exception ex) {ex.printStackTrace();} –
public void characters (char [] ac, int i, int j) throws SAXException { \t символы.append (ac, i, j); tmpValue = new String (ac, i, j) .trim(); } –