Ola, preciso apenas converter um documento/arquivo rtf para html
mais especificamente tenho um arquivo rtf que serve de modelo para mandar emails em lote, quando vou mandar os email converto pra html faço um parser nas tags que quero colocar coisas específicas e mando.
O meu problema mesmo é a codificação que vem bugada, no caso a UTF-8 não pega os caracteres como acentuação… Quando o htmlEditorKit le o doc gerado pelo rtfEditorKit ele não reconhece ou não consegue fazer a conversão da codificação.
Já tentei vários códigos da internet, mas sempre aparece um com um problema diferente. Já consegui converter com a codificação toda certa, mas perdia formatação…
Agradeço a quem puder me ajudar
segue o codigo
FileInputStream is = new FileInputStream(mailModel);
StringWriter writer = new StringWriter();
RTFEditorKit rtfEditorKit = new RTFEditorKit();
HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
Document doc = rtfEditorKit.createDefaultDocument();
rtfEditorKit.read(is, doc, 0);
htmlEditorKit.write(writer, doc, 0, doc.getLength());
Você poderia pegar o arquivo RTF original (que deve estar em Windows-1252) e salvá-lo em UTF-8? Existem editores de texto que fazem isso (acho que o Notepad++ faz isso)
Até poderia, mas há um impecilio, é que minha aplicação será um assistente de um ERP. Então não posso mexer no arquivo original. Tenho que trabalhar nos formatos/padrões existentes.
E creio que a codificação já esteja em UTF-8, pois quando abro com o word ele me pede a codificação e ele só reconhece perfeitamente na UTF-8, mesma coisa no notepad++.
Pode ser mexido em outras partes do projeto, tipo não converter para html…
eu só preciso fazer um parser no rtf e enviar por email com codificação e formatação ok.
Já tentei enviar o rtf, usei o outlook como client e ele não tem um vizualizador de rtf, então ele fica como anexo, creio ser igual na maioria dos clients
Só perguntei isso para você fazer um teste e ajudar a resolver o problema, não estou dizendo que é para fazer isso como parte da produção.
Outra pergunta: o que ocorre se você salvar esse tal arquivo (que você jura de pés juntos que é UTF-8 ) como Windows-1252 (ou ANSI, que é normalmente como isso é chamado) e rodar sua aplicação?
Dica: o RTFEditorKit tem um método read que aceita um Reader, não um InputStream.
http://docs.oracle.com/javase/6/docs/api/javax/swing/text/rtf/RTFEditorKit.html#read(java.io.Reader,%20javax.swing.text.Document,%20int)
A dica seria você criar um InputStreamReader passando o encoding adequado para os arquivos de entrada, e então passar esse InputStreamReader para o RTFEditorKit. Que tal?
Testei novamente agora com as duas codificações ansi/utf-8
em ambas no html ele fica com ? no lugar dos caracteres especiais

também na aplicação quando mando retornar o tipo de codificação vem utf-8, porém achei muito estranho o fato de que quando abri no notepad++ agora ele abriu com ansi…
:?
tentei com:
FileInputStream is = new FileInputStream(mailModel);
rtfEditorKit.read(new BufferedReader(new InputStreamReader(is)), doc, 0);
ficou na mesma…
Tem um construtor de InputStreamReader que você passa o encoding - leia sempre o JavaDoc antes de usar o primeiro construtor que aparece no Eclipse ou no NetBeans - tinha esquecido de avisar
mesmo assim, isto é indiferente, pois o algoritmo não tem problemas na leitura do arquivo.
O problema esta na hora de converter para html. Se eu printar o rtf ele mostra a codificação ok