我有带复选框的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更改此设置,还是可以使用其他解决方案,以便字符串比较通过?
答案 0 :(得分:2)
问题是编译器和ide(intellij)使用了不同的编码。 IDE使用UTF-8和编译器CP1252,这可以通过将这两行添加到我的build.gradle来改变
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"
我的案子按预期工作了。