Charset / Encoding

Estou usando JExcel para ler um arquivo, porém estou tendo problemas assim:

Quando a palavra é por exemplo "MÁQUINA", o java lê assim: "M\ufffdQUINA", pois bem, como faço para converter isso de volta para "MÁQUINA" ? Para que possa ser salvo no meu banco de dados?

Estou tentando assim:

[code]public String decoder(String str) {

    Charset charsetOrigem = Charset.forName("UTF-8");  
    CharsetEncoder encoderOrigem = charsetOrigem.newEncoder();
    Charset charsetDestino = Charset.forName("windows-1252");
    CharsetDecoder decoderDestino = charsetDestino.newDecoder();
    
    String s = "";

    try {
        ByteBuffer bbuf = encoderOrigem.encode(CharBuffer.wrap(str));
        CharBuffer cbuf = decoderDestino.decode(bbuf);
        s = cbuf.toString();
    } catch (CharacterCodingException e) {
        e.printStackTrace();
    }

    return s;
}[/code]

Grato.

oi kimba

deveria ser algo por ai. qual é o resultado tentando esse seu codigo pra entrada do maquina?

Cara o \ufffd (�) é o replacement character. Ele indica que não foi possível decodificar certos bytes usando o encoding atual. Não tem como obter a string original a partir dele, você tem que evitar que ele apareça, ou seja, tem que usar o encoding correto para decodificar os bytes. Talvez o JExcel precise ser informado sobre qual encoding usar para ler o arquivo, não sei…

Fala gente, obrigado pelas respostas!

Paulo, fiz uma rotina pra ir testando todos os Charsets… em cada um dava um resultado mais exdrúxulo que o outro.

Renato… já pelejei na documentação desse JExcel… eu imagina que realmente ele deveria permitir informar a a codificaçao na hora de abrir, mas não é assim não, pelo menos não achei!

Relata o bug aos desenvolvedores do JExcel então…