0

所以我有以下代码片段:

public String getValue() {
    try {

        String stringValue = new String(toBytes(fieldGetter.get()), 273);
        
        return String.format("2.2s", stringValue);
    }
    catch (UnsupportedEncodingException e) {
        throw new IllegalStateException("Could not create decimal field with given charset", e);
    }
}

所以 fieldGetter.get() 基本上是“21”,而 273 字符集用于 IBM / PL1。格式不言自明。

getValue() 返回“\n”,这很奇怪,因为根据我的理解,我定义的格式应该是 2 个字符长。不知何故,在调试它时,我可以看到以下内容:

调试屏幕

所以你可以看到一个值中有两个字符,我认为这是因为 Eclipse 编码它不同,因为它是用 273 编码的。我稍后会解释这个问题。

通常 getValue() 方法会返回调试时无法读取的内容,如下所示: 调试另一个编码值

如您所见,它是一个正方形:)

这里的问题是我们坚持这一点,它会导致 DB2 表上出现奇怪的行为,我的假设是这是因为 SQL DB 中的“\n”会导致一个新行。如果我错了,请纠正我。持久值是从 IBM 机器中选择的,它导致 37 个字符,而不是预期的 21 个字符。我必须补充一点,它查看的是十六进制值。

所以我的问题是是否有另一种方法来实现我的目标,即通过解码 charset 273 中的字节数组来创建一个新字符串?或者如果我错过了什么或类似的东西?也许无论我如何编码/解码它都会导致相同的结果,因为这正是 21 在 273 中解码的样子?

提前谢谢了!

4

0 回答 0