Java encoding XML

Java

17/06/2013

Pessoal boa tarde,

Alguém sabe como identificar qual o character encoding que o java tá usando no momento da importação de um xml? Ou como corrigir o probelma?

No arquivo que estou lendo está <?xml version='1.0' encoding='ISO-8859-1'?>. E na gravação do registro no mysql dá o erro: WARNING: SQL Error: 1366, SQLState: HY000
SEVERE: Incorrect string value: '\xC2\x80O' for column 'bairro' at row 1

A propriedade colltion da tabela é "latin' - defaul collation" e a engine do banco é InnoDB.

** o estranho é que rodo o mesmo programa em outro PC (onde a unica diferença é que 64 bits) e funciona sem erro...

obrigado,
Ricardo Pestana

Ricardo Pestana

Curtidas 0

Respostas

Marcelo Senaga

Marcelo Senaga

17/06/2013

Que estranho. O encoding é ISO-8859-1.
Teria como postar o código Java de importação?
GOSTEI 0
Ricardo Pestana

Ricardo Pestana

17/06/2013


Bom dia,

É mais ou menos o código abaixo, só que o mais estranho é que na máquina 64 bits (maq do cliente) funciona, e outro detalhe, o erro ocorre no momento da gravação em banco pelo que entendi... já troquei o driver do mysql em casa (maq. 32) pra ver se resolvia e não mudou nada, vou tentar montar um ambiente com outro banco só de curiosidade...

Mas aproveitando, tem como eu mudar o encoding de 8859-1 para UTF-8 ou ele assume o que tá no cabeçalho do xml???

public class LeArquivo extends DefaultHandler {

private StringBuffer valorAtual = new StringBuffer(50);
private final String NO_BAIRRO = "bairro";
private Endereco endereco = new Endereco();
private SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");

EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit");
EntityManager em = emf.createEntityManager();
int ctreg;
private String arquivo;


@Override
public void startDocument() {
}

@Override
public void endDocument() {
em.getTransaction().commit();
em.close();
}

@Override
public void startElement(String uri, String localName, String tag, Attributes atributos) {

}

@Override
public void endElement(String uri, String localName, String tag) {

if (tag.equalsIgnoreCase(NO_ENDERECO)) {
Query bk1 = em.createNativeQuery("INSERT INTO endereco (codigo, sequencia, logradouro, numero, complemento, bairro, codigoMunicipio, codigoMunicipioResidencia, cep, tipo_endereco, reside_exterior) VALUES (?,?,?,?,?,?,?,?,?,?,?)");

if(tag.equalsIgnoreCase(NO_BAIRRO)){
endereco.setBairro(valorAtual.toString());
}

valorAtual.delete(0, valorAtual.length());
}

@Override
public void characters(char[] ch, int start, int length) {
valorAtual.append(ch, start, length);

}

}
GOSTEI 0
Marcelo Senaga

Marcelo Senaga

17/06/2013

O código está legal.
E não, infelizmente ele assume o que está no cabeçalho.
GOSTEI 0
Ricardo Pestana

Ricardo Pestana

17/06/2013

O problema tá na hora de gravar no bco pelo que entendi, pq se eu trocar o valor lido do xml para "" funciona...

Mas o mais intrigante é funcionar na maq. 64bits...

De qq forma vou reinstalar o mysql e ver se consigo configurar montar o ambiente para oracle e testar...

Muito obrigado pela atenção...


GOSTEI 0
Marcelo Senaga

Marcelo Senaga

17/06/2013

Poste o código de leitura do XML. Vou dar uma analisada.
GOSTEI 0
POSTAR