it-swarm.dev

Jak opravit neplatný bajt 1 z 1-bajtové sekvence UTF-8

Snažím se načíst níže xml z db pomocí metody Java, ale dostávám chybu

Kód slouží k analýze 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();

Data

<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>

Chyba

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

Četl jsem v některých vláknech, že je to kvůli některým zvláštním znakům v xml. Jak tento problém vyřešit?

24
shaiksha

Jak tento problém vyřešit?

Čtení dat pomocí správného kódování znaků. Chybová zpráva znamená, že se pokoušíte číst data jako UTF-8 (úmyslně nebo proto, že se jedná o výchozí kódování souboru XML, který nezadává <?xml version="1.0" encoding="somethingelse"?>), ale ve skutečnosti je v jiném kódování, jako je například kód ISO-8859- 1 nebo Windows-1252.

Abych mohl poradit, jak to udělat, musím vidět kód, který právě používáte pro čtení XML.

16
Ian Roberts
  1. Otevřete xml v poznámkovém bloku 
  2. Ujistěte se, že na začátku a na konci dokumentu nemáte více místa.
  3. Vyberte Soubor -> Uložit jako
  4. vyberte možnost Uložit jako typ -> Všechny soubory
  5. Zadejte název souboru jako abcd.xml
  6. vyberte Kódování - UTF-8 -> Klepněte na tlačítko Uložit
14
Barani r

Snaž se:

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);

Pokud je to něco jiného než UTF-8, změňte kódovací část na dobrou.

7
LaGrandMere

Dostával jsem xml jako String a používám xml.getBytes () a získával tuto chybu. Změna na xml.getBytes (Charset.forName ("UTF-8")) pracovala pro mě. 

3
John

Měl jsem tento problém, ale soubor byl v UTF-8, to bylo jen, že nějak na charakteru přišel, že nebyl zakódován v UTF-8. Pro vyřešení problému jsem udělal to, co je uvedeno v tomto vlákně, tj. Validoval jsem soubor: Jak zkontrolovat, zda je soubor platný UTF-8?

Příkaz spustíte v podstatě:

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

A pokud je v UTF-8 něco, co není zakódováno, dá vám čísla řádků a řádků, abyste je mohli najít.

1
Robert Sjödahl

Stejně jako já, kteří rozumím principům kódování znaků, také čte Joelův článek který je vtipný, protože stejně obsahuje špatné znaky a stále nemůžu přijít na to, co sakra (výstraha spoilerů, I ') m Mac uživatel) pak vaše řešení může být stejně jednoduché jako odstranění lokálního repo a opět klonování.

Moje kódová základna se od posledního běhu OK nezměnila, takže nedávalo smysl mít chyby UTF vzhledem k tomu, že náš systém sestav si na to nikdy nestěžoval .... dokud jsem si nepamatoval, že jsem před několika dny omylem odpojil počítač s IntelliJ Idea a celou věcí spuštěnou (Java/Tomcat/Hibernate)

Můj Mac udělal skvělou práci jako předstírat, že se nic nestalo a já jsem podnikal jako obvykle, ale základní souborový systém byl nějak poškozen. Ztratil jsem celý den a snažil se to zjistit. Doufám, že to někomu pomůže.

0
felipe

Měla jsem stejný problém. Mým problémem bylo, že chybí argument „-Dfile.encoding = UTF8“ pod Java_OPTION v souboru statWeblogic.cmd ve serveru WebLogic.

0
chk.buddi

Stalo se mi, že jsem narazil na tento problém kvůli sestavení Antu.

Že Ant stavět vzal soubory a aplikoval filterchain expandproperties na to. Během tohoto filtrování souborů bylo pro generování filtrovaných souborů použito implicitní implicitní implicitní kódování znaku systému Windows bez znaku UTF-8 - znaky mimo jeho znakovou sadu proto nebylo možné správně mapovat.

Jedním z řešení bylo poskytnout Antu explicitní proměnnou prostředí pro UTF-8. V Cygwin před spuštěním Ant: export ANT_OPTS="-Dfile.encoding=UTF-8".

0
Abdull

Měl jsem stejný problém v mé aplikaci JSF, která měla komentář řádek obsahující některé speciální znaky na stránce XMHTL. Když jsem porovnal předchozí verzi v mém Eclipse, měl komentář,

//Some �  special characters found

Tyto znaky a stránka byla načtena v pořádku. Většinou se jedná o XML soubory, proto je porovnejte s pracovní verzí.

0
Lucky

Setkal jsem se se stejným problémem a po dlouhém zkoumání mého XML souboru jsem zjistil, že je problém: bylo zde několik nezpracovaných znaků jako «».

0