Подтвердить что ты не робот

Как исправить недопустимый байт 1 из 1-байтовой последовательности UTF-8

Я пытаюсь извлечь ниже xml из db с помощью java-метода, но я получаю сообщение об ошибке

Код, используемый для анализа xml

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes()));

Document doc = db.parse(is);

Element elem = doc.getDocumentElement();

// here we expect a series of <data><name>N</name><value>V</value></data>
NodeList nodes = elem.getElementsByTagName("data");

TableID jobId = new TableID(_processInstanceId);
Job myJob = Job.queryByID(_clientContext, jobId, true);

if (nodes.getLength() == 0) {
    log(Level.DEBUG, "No data found on condition XML");

}

for (int i = 0; i < nodes.getLength(); i++) {
    // loop through the <data> in the XML

    Element dataTags = (Element) nodes.item(i);
    String name = getChildTagValue(dataTags, "name");
    String value = getChildTagValue(dataTags, "value");

    log(Level.INFO, "UserData/Value=" + name + "/" + value);

    myJob.setBulkUserData(name, value);
}

myJob.save();

Данные

<ContactDetails>307896043</ContactDetails>
<ContactName>307896043</ContactName>
<Preferred_Completion_Date>
</Preferred_Completion_Date>
<service_address>A-End Address: 1ST HELIERST HELIERJT2 3XP832THE CABLES 1 POONHA LANEST HELIER JE JT2 3XP</service_address>
<ServiceOrderId>315473043</ServiceOrderId>
<ServiceOrderTypeId>50</ServiceOrderTypeId>
<CustDesiredDate>2013-03-20T18:12:04</CustDesiredDate>
<OrderId>307896043</OrderId>
<CreateWho>csmuser</CreateWho>
<AccountInternalId>20100333</AccountInternalId>
<ServiceInternalId>20766093</ServiceInternalId>
<ServiceInternalIdResets>0</ServiceInternalIdResets>
<Primary_Offer_Name  action='del'>MyMobile Blue &#163;44.99 [12 month term]</Primary_Offer_Name>
<Disc_Reason  action='del'>8</Disc_Reason>
<Sup_Offer  action='del'>80000257</Sup_Offer>
<Service_Type  action='del'>A-01-00</Service_Type>
<Priority  action='del'>4</Priority>
<Account_Number  action='del'>0</Account_Number>
<Offer  action='del'>80000257</Offer>
<msisdn  action='del'>447797142520</msisdn>
<imsi  action='del'>234503184</imsi>
<sim  action='del'>5535</sim>
<ocb9_ARM  action='del'>false</ocb9_ARM>
<port_in_required  action='del'>
</port_in_required>
<ocb9_mob  action='del'>none</ocb9_mob>
<ocb9_mob_BB  action='del'>
</ocb9_mob_BB>
<ocb9_LandLine  action='del'>
</ocb9_LandLine>
<ocb9_LandLine_BB  action='del'>
</ocb9_LandLine_BB>
<Contact_2>
</Contact_2>
<Acc_middle_name>
</Acc_middle_name>
<MarketCode>7</MarketCode>
<Acc_last_name>Port_OUT</Acc_last_name>
<Contact_1>
</Contact_1>
<Acc_first_name>.</Acc_first_name>
<EmaiId>
</EmaiId>

ОШИБКА

 org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.

Я читаю в некоторых потоках это из-за некоторых специальных символов в xml. Как исправить эту проблему?

4b9b3361

Ответ 1

Как исправить эту проблему?

Прочитайте данные, используя правильную кодировку символов. Сообщение об ошибке означает, что вы пытаетесь прочитать данные как UTF-8 (либо намеренно, либо потому, что это кодировка по умолчанию для XML файла, который не указывает <?xml version="1.0" encoding="somethingelse"?>), но он фактически находится в другой кодировке, такой как ISO- 8859-1 или Windows-1252.

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

Ответ 2

  • Откройте xml в блокноте
  • Убедитесь, что у вас нет дополнительного места в начале и конце документа.
  • Выберите "Файл" → "Сохранить как"
  • выберите сохранение как тип → Все файлы
  • Введите имя файла как abcd.xml
  • выберите Кодирование - UTF-8 → Нажмите Сохранить

Ответ 3

Try:

InputStream inputStream= // Your InputStream from your database.
Reader reader = new InputStreamReader(inputStream,"UTF-8");

InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");

saxParser.parse(is, handler);

Если это что-то еще, кроме UTF-8, просто измените часть кодировки на лучшую.

Ответ 4

У меня была эта проблема, но файл был в UTF-8, это было просто так, что каким-то образом на персонаж пришел, который не был закодирован в UTF-8. Чтобы решить проблему, я сделал то, что указано в этом потоке, т.е. Я проверил файл: Как проверить, действительно ли файл UTF-8?

В основном вы запускаете команду:

$iconv -f UTF-8 your_file -o/dev/null

И если в UTF-8 есть что-то, что не кодируется, оно даст вам номера строк и строк, чтобы вы могли их найти.

Ответ 5

Я получал xml как String и использовал xml.getBytes() и получал эту ошибку. Переход на xml.getBytes(Charset.forName( "UTF-8" )) работал у меня.

Ответ 6

Мне довелось столкнуться с этой проблемой из-за сборки Ant.

Это Ant build взяло файлы и применило filterchain expandproperties к нему. Во время этой фильтрации файлов моя машинная машина Windows, неявная по умолчанию кодировка символов, отличная от UTF-8, использовалась для генерации фильтрованных файлов, поэтому символы, находящиеся за пределами своего набора символов, не могли правильно отображаться.

Одним из решений было предоставить Ant явную переменную среды для UTF-8. В Cygwin перед запуском Ant: export ANT_OPTS="-Dfile.encoding=UTF-8".

Ответ 7

Я столкнулся с одной и той же проблемой, и после долгого изучения моего XML файла я нашел проблему: было несколько неэкранированных символов, таких как « ».

Ответ 8

Те, которые любят меня, которые понимают принципы кодирования символов, также читают статью Джоэля, которая смешно, поскольку она в любом случае содержит неправильные символы и все еще не может понять, что такое черт (оповещение о спойлере, я пользователь Mac), тогда ваше решение может быть таким же простым, как удаляет локальное репо и снова клонирует его.

Моя база кода не изменилась с тех пор, как в последний раз она работала нормально, поэтому было бессмысленно иметь ошибки UTF, учитывая тот факт, что наша система сборки никогда не жаловалась на это.... пока я не вспомнил, что случайно отключил свой компьютер несколько дней назад с IntelliJ Idea и всем, что работает (Java/Tomcat/Hibernate)

Мой Mac сделал блестящую работу, притворяясь, что ничего не произошло, и я вел себя как обычно, но основная файловая система была каким-то образом повреждена. Потратил весь день, пытаясь понять это. Надеюсь, это поможет кому-то.