it-swarm.dev

Como corrigir o byte 1 inválido da sequência UTF-8 de 1 byte

Eu estou tentando buscar o xml abaixo do banco de dados usando um método Java, mas estou recebendo um erro

Código usado para analisar o 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();

Os dados

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

O erro

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

Eu li em alguns tópicos é por causa de alguns caracteres especiais no xml. Como corrigir esse problema?

24
shaiksha

Como consertar este problema ?

Leia os dados usando a codificação de caracteres correta. A mensagem de erro significa que você está tentando ler os dados como UTF-8 (deliberadamente ou porque essa é a codificação padrão para um arquivo XML que não especifica <?xml version="1.0" encoding="somethingelse"?>), mas na verdade está em uma codificação diferente, como ISO-8859- 1 ou Windows-1252.

Para poder aconselhar sobre como você deve fazer isso, eu tenho que ver o código que você está usando atualmente para ler o XML.

16
Ian Roberts
  1. Abra o xml no bloco de notas 
  2. Certifique-se de não ter espaço extra no início e no final do documento.
  3. Selecione Arquivo -> Salvar como
  4. selecione salvar como tipo -> Todos os arquivos
  5. Digite o nome do arquivo como abcd.xml
  6. selecione Codificação - UTF-8 -> Clique em Salvar
14
Barani r

Experimentar:

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

Se for algo diferente de UTF-8, basta alterar a parte de codificação para a boa.

7
LaGrandMere

Eu estava recebendo o xml como uma String e usando xml.getBytes () e recebendo este erro. Mudando para xml.getBytes (Charset.forName ("UTF-8")) funcionou para mim. 

3
John

Eu tive esse problema, mas o arquivo estava em UTF-8, era apenas que de alguma forma em caráter veio em que não foi codificado em UTF-8. Para resolver o problema, fiz o que é dito neste thread, ou seja, validei o arquivo: Como verificar se um arquivo é válido UTF-8?

Basicamente você executa o comando:

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

E se houver algo que não esteja codificado em UTF-8, ele fornecerá os números de linha e linha para que você possa encontrá-lo.

1
Robert Sjödahl

Eu tive o mesmo problema. Meu problema era que estava faltando o argumento “-Dfile.encoding = UTF8” sob o arquivo Java_OPTION no arquivo statWeblogic.cmd no servidor WebLogic.

0
chk.buddi

Aconteceu de me deparar com esse problema por causa de uma compilação Ant.

Essa compilação Ant pegou arquivos e aplicou filterchain expandproperties a ela. Durante essa filtragem de arquivos, a codificação implícita de caracteres não UTF-8 padrão da minha máquina Windows foi usada para gerar os arquivos filtrados - portanto, os caracteres fora de seu conjunto de caracteres não puderam ser mapeados corretamente.

Uma solução foi fornecer ao Ant uma variável de ambiente explícita para o UTF-8. No Cygwin, antes de lançar o Ant: export ANT_OPTS="-Dfile.encoding=UTF-8".

0
Abdull

Eu tive o mesmo problema no meu aplicativo JSF que estava tendo uma linha de comentário contendo alguns caracteres especiais na página XMHTL. Quando eu comparei a versão anterior no meu Eclipse, tinha um comentário,

//Some �  special characters found

Removido esses caracteres e a página carregada bem. Principalmente está relacionado a arquivos XML, então, por favor compare com a versão de trabalho.

0
Lucky

Eu encontrei o mesmo problema e após uma longa investigação do meu arquivo XML eu encontrei o problema: havia poucos caracteres sem escape como «».

0
Artsiom Miklushou