Java encoding XML
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,
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
Curtidas 0
Respostas
Marcelo Senaga
17/06/2013
Que estranho. O encoding é ISO-8859-1.
Teria como postar o código Java de importação?
Teria como postar o código Java de importação?
GOSTEI 0
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
17/06/2013
O código está legal.
E não, infelizmente ele assume o que está no cabeçalho.
E não, infelizmente ele assume o que está no cabeçalho.
GOSTEI 0
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...
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
17/06/2013
Poste o código de leitura do XML. Vou dar uma analisada.
GOSTEI 0