从复选框中检索值的编码格式错误

时间:2018-01-11 14:42:43

标签: java pdfbox

我有带复选框的pdf。现在我想用pdfbox设置一个复选框的值,以便检查它。当复选框的onValue包含德语特殊字符时,它将无效,否则它将起作用。

我认为这样做的原因是,checkbox值的编码被编码为windows-1252,我尝试使用的setValue是UTF-8。

这是我的TestMethod,用于重现错误

final String newValue = "Spülen";
PrefillDataDrawer drawer = new PrefillDataDrawer(pdf);

PDField field = getPDFieldForName(searchField);
assertNotNull(field);
PDCheckBox cb = (PDCheckBox) field;

assertEquals(newValue, cb.getOnValue());

输出结果为:

expected:<Sp[ü]len> but was:<Sp[ü]len>
Expected :Spülen
Actual   :Spülen

当我了解到intellij的控制台使用系统编码时,在我的情况下是windows-1252,这就是为什么你正确看到实际值并且期望值是UTF-8并显示为:Spülen

要证明我可以将上述newValue更改为此

final String newValue = "Sp\u00FClen";
然后我的测试通过了。

所以我的问题是cb.getOnValue()在windows-1252中传递了一个字符串。是否可以使用pdfbox更改此设置,还是可以使用其他解决方案,以便字符串比较通过?

1 个答案:

答案 0 :(得分:2)

问题是编译器和ide(intellij)使用了不同的编码。 IDE使用UTF-8和编译器CP1252,这可以通过将这两行添加到我的build.gradle来改变

compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"

我的案子按预期工作了。