JasperReport + ISO-8859-1 no XML => mas aparece UTF-8

Ola,

Meu arquivo XML esta da seguinte forma:

<?xml version="1.0" encoding="ISO-8859-1"?>
&lt;!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&gt;

&lt;jasperReport ...

mas na hora de gerar o relatorio em formato HTML, o Firefox/IE sempre mostram em UTF-8. Ja fechei todos os navegadores, zerei o cache, restartei o Tomcat, gerei trocentas vezes o arquivo .jasper, mas continua do mesmo jeito.

Fica assim no HTML gerado:

&gt;&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;style type="text/css"&gt;
    a {text-decoration: none}
  &lt;/style&gt;
&lt;/head&gt;

Ao gerar em PDF os acentos ficam legais, mas no HTML fica tudo baguncado.

O encoding do xml do relatório não tem nada a ver com o encoding do html exportado pelo Jasper. Existe um parâmetro de exportação do relatório que configura isso. Poste o código que você está usando para exportar como html que posso ajudar.

  public void GerarRelat(
  String Titulo, String NomeArq,
  int Lingua, ResultSet rs
  ) throws IOException {
    URL URLNomeArq = cl.getResource(NomeArq);
    Map parameters = new HashMap();
    parameters.put("Sistema", Sistema);
    parameters.put("Titulo", Titulo);
    parameters.put("DataHora", FormatDate.getDataAtual(Lingua) + " - " + FormatTime.getHoraAtual(Lingua));
    //
    try {
      JasperReport jasperReport = (JasperReport)JRLoader.loadObject(URLNomeArq);
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRResultSetDataSource(rs));
      JasperViewer.viewReport(jasperPrint,false);
    }
    catch (JRException e) { e.printStackTrace(); }
  }

Eu uso o cl (classloader) para eu poder abrir o arquivo Jasper mesmo se ele esteja dentro de um JAR em uma aplicacao Swing Java Web Start.

Te passei o codigo da versao Swing, mas na versao WEB esta assim:

  public void GerarHTML(
  String Titulo, String NomeArq, String URLImages,
  int Lingua, ResultSet rs
  ) throws IOException, ServletException {
    File reportFile = new File(context.getRealPath(NomeArq));
    //
    Map parameters = new HashMap();
    parameters.put("BaseDir", reportFile.getParentFile());
    parameters.put("Sistema", Sistema);
    parameters.put("Titulo", Titulo);
    parameters.put("DataHora", FormatDate.getDataAtual(Lingua) + " - " + FormatTime.getHoraAtual(Lingua));
    //
    try {
      JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRResultSetDataSource(rs));
      JRHtmlExporter exporter = new JRHtmlExporter();
      Map imagesMap = new HashMap();
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      request.getSession().setAttribute("IMAGES_MAP", imagesMap);
      exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
      exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
      exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
      exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, URLImages);
      exporter.exportReport();
    }
    catch (JRException e)	{
      return;
    }
  }

Coloquei a linha abaixo e funcionou:

response.setCharacterEncoding("ISO-8859-1");

Contudo, ao olhar o fonte da pagina HTML gerada, esta assim:

&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;

Poderia me explicar como funciona isso? Meu XML esta ISO, meu response esta ISO, mas mesmo assim o Jasper insiste em colocar este charset UTF no <head> da pagina gerada?

Existe um dos parâmetros em JRExporterParameter que serve justamente para definir o encoding. Basta você fazer algo como:

exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "ISO-8859-1");

Note que eu não lembro exatamente o nome do atributo de JRExporterParameter, mas deve ser algo parecido com isso.

Fiz do jeito que voce falou e deu certo, arrumou o “meta” do HTML.
Obg!!!