Amigos, tenho uma rotina que converte hexa para char utilizando o metodo hexToChar. Mas esta acontecendo alguns problemas quando as palavras tem acentos ou “ç”. Vou dar exemplos:
CONVERTIDO ORIGINAL
CAMBÉ (EAR CABUNI cb CAB04) CAMBÉ (EAR CABUNI CB CAB04)
SÃO FRANCISCO - EXPOSIÇÃO SÃO FRANCISCO - EXPOSIÇÃO
alguem sabe o porque ou tem alguma dica de como fazer essa conversão correta?
Isso é problema de codificação (conversão caracter Unicode <-> byte).
No seu caso, se você converter a string para byte usando a codificação ISO-8859-1 (veja o método toByteArray) , vai obter os códigos esperados (do Windows). No seu caso, Ã (que em Unicode é \u00C3) vai ser convertido para C3, como esperado.
paulokarol
Agradeço a ajuda amigo, mas nao consegui fazer isso funcionar, vou postar meu codigo:
publicStringconvertHex(StringpText)throwsException{if(pText.length()>2&&pText.substring(0,2).equals("0x")){StringwBuffer="";// Ignores the first 2 characters pText=pText.substring(2);// Converts Hex to Stringfor(inti=0;i<pText.length();i=i+2){wBuffer=wBuffer+(char)Integer.parseInt(pText.substring(i,i+2),16);}returnnewString(wBuffer.getBytes(),"ISO-8859-1");}else{returnpText;}}
Não sei exatamente setar a codificação para ISO-8859-1, desse jeito as palavras ate vem mais certas, mas sempre ven sujeira. Agradeceria muito se podesse me mostrar como fazer isso.
Muito Obrigado
T
thingol
Vamos lá.
Pra começar, bytes são bytes e caracteres são caracteres. Então o seu código já tem problemas conceituais.
Você poderia me passar um exemplo de string em hexadecimal (com acentos, cedilhas e outras tranqueiras) que você está tentando converter? É melhor que você simplesmente postar o que está dando errado.
paulokarol
Ok, vamos lá então:
este é o código hexa:
0x494249504F52C3832020202020202020202020202020
este é o que meu código gera:
CAMBÃ?
este é a string correta:
CAMBÉ
Obrigado por estar me ajudando.
T
thingol
Bom, você me passou o código para IBIPORÃ, mas não tem problema.
classTesteHexString{publicstaticvoidmain(String[]args)throwsException{// I B I P O R <Ã>Stringhex="0x494249504F52C3832020202020202020202020202020";// Pela codificação, isto é UTF-8, não ISO-8859-1. Em UTF-8, o caracter \u00C3 é // convertido para 2 bytes: C3 83.if(hex.startsWith("0x")||hex.startsWith("0X"))hex=hex.substring(2);// removo o "0x"intnBytes=hex.length()/2;byte[]bytes=newbyte[nBytes];for(inti=0;i<nBytes;++i){bytes[i]=(byte)Integer.parseInt(hex.substring(i*2,i*2+2),16);}// Agora vamos converter em uma stringStringstr=newString(bytes,"UTF-8");// Para mostrar, se for no Windows, configure a fonte do console para Lucida Console// e execute o comando CHCP 1252 antes de chamar este programa com java -cp . TesteHexString.System.out.println(str);}}
paulokarol
Beleza cara, é depois que te mandei foi que vi que tava errada mas como ela também tinha “ã” eu deixei.
Testei o código, deu certo. Muito obrigado mesmo pela ajuda!!
E também vi meu erro, eu tava convertendo pra char onde devia converter para byte, agora entendi o que voce havia falado.