iReport预览/导出器输出不处理UTF-8翻译?

Ste*_*all 6 jasper-reports utf-8 internationalization ireport

我正在尝试使用翻译包来处理我的报告.无论我尝试什么,我似乎无法为任何语言呈现UTF-8 - 我只为每个UTF-8字符获得两个破碎的字符.

我的报告从这开始:<?xml version="1.0" encoding="UTF-8"?> ...但是iReport预览不起作用,

我的实际代码有:

JRProperties.setProperty("net.sf.jasperreports.default.pdf.encoding", "UTF-8");
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8")
Run Code Online (Sandbox Code Playgroud)

似乎都无法输出UTF-8.这可能会发生什么?我把头发拉了出来.即使字体设置为Arial,我也遇到了问题.我的网络应用程序使用与Grails相同的字体和类似的捆绑包,我没有问题,所以特定于jasperreports发生了一些事情.

编辑: 我认为字节顺序标记可能是问题,但事实并非如此.我创建了一个基本报告,显示4.0.2中的失败.

这是资源包:

希腊属性文件

并且iReport中的输出:

在此输入图像描述

这是报告,以及用于观察这些结果的属性文件.

Nore信息: 当属性文件以ANSI编码保存时,我可以获得所有德语字符,包括ä和ß.当属性文件保存为UTF-8时,只有ASCII字符有效.

Ale*_*x K 9

Stefan,我知道这不是一个很好的解决方案,但它适用于您的样品.

        <textField>
            <reportElement x="49" y="0" width="359" height="38"/>
            <textElement>
                <font fontName="Arial" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
            </textElement>
            <textFieldExpression><![CDATA[new String($R{title}.getBytes("ISO-8859-1"), "UTF-8")]]></textFieldExpression>
        </textField>
Run Code Online (Sandbox Code Playgroud)

如果您知道源代码页,转换将帮助您.可以是您可以在报表中传递代码页并将其用作表达式中的参数或变量.

表达式可以是这样的:

   <textFieldExpression><![CDATA[new String($R{title}.getBytes($P{codePage}), "UTF-8")]]></textFieldExpression>
Run Code Online (Sandbox Code Playgroud)

或者像这样,如果您可以在属性文件的标题中传递代码页:

   <textFieldExpression><![CDATA[new String($R{title}.getBytes($R{codePage}), "UTF-8")]]></textFieldExpression>
Run Code Online (Sandbox Code Playgroud)

更新:
添加Arial字体后,我的irfonts.xml(%IREPORT_DIR%\ ireport\fonts)具有以下内容:

<?xml version="1.0" encoding="UTF-8"?>

<fontFamilies>
   <fontFamily name="Arial">
       <normal><![CDATA[arial.ttf]]></normal>
       <bold><![CDATA[arialbd.ttf]]></bold>
       <italic><![CDATA[ariali.ttf]]></italic>
       <boldItalic><![CDATA[arialbi.ttf]]></boldItalic>
       <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
       <pdfEmbedded><![CDATA[false]]></pdfEmbedded>
   </fontFamily>

</fontFamilies>
Run Code Online (Sandbox Code Playgroud)