Java 使用iText5在生成的PDF中使用unicode字符

Java 使用iText5在生成的PDF中使用unicode字符,java,unicode,utf-8,itext,Java,Unicode,Utf 8,Itext,我对生成的PDF中的unicode字符有问题。在我自己的工作站上一切正常,但在测试环境中出现了问题 代码插入值如下所示: Font boldDefaultFont = FontFactory.getFont(FontFactory.HELVETICA, 10, Font.BOLD); // ... PdfPCell headerCell = new PdfPCell(); // unit.getName() returns "°C" Phrase header = new Phrase(uni

我对生成的PDF中的unicode字符有问题。在我自己的工作站上一切正常,但在测试环境中出现了问题

代码插入值如下所示:

Font boldDefaultFont = FontFactory.getFont(FontFactory.HELVETICA, 10, Font.BOLD);
// ...
PdfPCell headerCell = new PdfPCell();
// unit.getName() returns "°C"
Phrase header =  new Phrase(unit.getName(), boldDefaultFont);
headerCell.addElement(header);
Java源代码是UTF-8格式的

当它在我的环境(java 1.6.0_18,WinXP)中运行时,正如我所期望的,单元格包含
°C
,但在测试环境(java 1.6.0_18,Win2003)中,结果是
C
。我发现这是一个编码问题(UTF-8'''是0xc2b0,在iso-8859-1中等于''')

目前,我尝试了以下方法:

Font boldDefaultFont = FontFactory.getFont(FontFactory.HELVETICA, 10, Font.BOLD);
// ...
PdfPCell headerCell = new PdfPCell();
// unit.getName() returns "°C"
Phrase header =  new Phrase(unit.getName(), boldDefaultFont);
headerCell.addElement(header);
1) 将
-Dfile.encoding=utf8
添加到java选项中(在两种环境中均无效)
2) 将ARIALUNI.TTF添加到测试环境C:\WINDOWS\Fonts(无效果)
3) 将unit.getName()编码为iso-8859-1,但它使我的机器中的学位信息消失。

查看pdf的环境没有影响,在我的工作站上生成的pdf在任何地方都能很好地显示,反之亦然


有人有这方面的经验吗?我打赌有一种方法可以让这两种环境都能正常工作。

我怀疑问题是否与iText有关。您确定unit.getName()返回的字符串正确吗?可能是单元名称(例如)使用VM的默认字符编码从配置文件读取,并且它与系统上的文件编码匹配,但在测试环境中不正确(文件是UTF-8编码的,但测试系统使用ISO-8859-1或Cp1252编码运行)?确定,第二个猜测:您编写的Java源文件是UTF-8编码的。您确定在为测试环境构建时告诉Java编译器对源文件使用UTF-8编码吗?单元名获取程序非常简单,它们只返回硬编码字符串。在这种情况下,主体是
返回“°C”。所以这里没有资源文件加载。谢谢,它给了我一些测试的想法,但没有:(.Build是在我的机器上用maven完成的(只使用不同的db配置文件)。你是对的,这可能与iText无关。简单的pdf测试程序在两个系统上产生了相同的输出,因此问题在别处,与代码无关,而与环境无关。我认为这是正确的,因为问题可能非常具体,几乎不可能提供足够的信息。我肯定不会o解决此问题后向此线程报告。