微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java - (273 IBM) 字符集在解码 21 时返回 \n

如何解决Java - (273 IBM) 字符集在解码 21 时返回 \n

所以我有以下代码片段:

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 个字符长。不知何故,调试时我可以看到以下内容

debugging screen

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

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

debugging another encoded value

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

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

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

非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。