Java 我在尝试将字节数组转换为字符串时会遇到奇怪的字符

Java 我在尝试将字节数组转换为字符串时会遇到奇怪的字符,java,oracle,utf-8,bytearray,clob,Java,Oracle,Utf 8,Bytearray,Clob,我从oracle Clob字段中读取数据,并将其存储到字节数组中。我之所以使用Clob,是因为varchar2没有足够的大小来容纳某些字段 我使用这个java代码来转换字节数组 String s1 = Arrays.toString(byteArray); String s2 = new String(byteArray, StandardCharsets.UTF_8).trim(); System.out.println(s1); System.out.pri

我从oracle Clob字段中读取数据,并将其存储到字节数组中。我之所以使用Clob,是因为varchar2没有足够的大小来容纳某些字段

我使用这个java代码来转换字节数组

    String s1 = Arrays.toString(byteArray);
    String s2 = new String(byteArray, StandardCharsets.UTF_8).trim();

    System.out.println(s1);
    System.out.println(s2);;
s1输出为

[0, 84, 0, 1, 2, 12, -128, 0, 0, 2, 0, 0, 0, 1, 0, 0, 1, 101, -74, -97, 0, 1, -106, 20, 0, 1, 47, -101, 0, 41, 0, 41, 3, 105, 0, 1, 0, 65, 0, 84, 0, 84, 0, 82, 0, 73, 0, 66, 0, 0, 0, 0, -110, -125, 16, -93, 9, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -116, 81, 2, -62, 27, 50, 0, 50]
s2输出为

预期产量为

ATTRIBUTE19 + ATTRIBUTE16
谁能告诉我是什么导致结果字符串中出现这些奇怪的字符

[编辑]

我还尝试将其中一个clob字段更新为1个字符“T”,这就是结果

我觉得这很奇怪,因为这个字段中没有单词LAST,而其他两个字段中有。这些字段的内容如下所示

(LAST_ENTRY == '') ? '' : $BON_AWARD_PCT_1 * $BON_BASE / 100


在存储为CLOB之前,最初的编码是什么?ISO-8859-1,尽管我尝试使用StandardCharsets.ISO_8859_1时,结果与上面相同。数据看起来不像预期输出的UTF-8编码。它看起来根本不像UTF-8,更像是UTF-16。我希望序列65、84、84在字节序列中重复两次;它只存在一次,所以有一些随机数据与您期望的文本混合。所以可能是来自数据库的数据包含一些我没有看到的隐藏字符,导致结果出错?只是ATTRIB in,可能会看到UTF-16LE。似乎文字消失了。可能是使用ObjectOutputStream/DataOutputStream编写的。或者对2字节字符进行某种奇怪的Hufmann压缩。
(LAST_ENTRY == '') ? '' : doRound($BON_AWARD_AMT_1 / $BON_BASE * 100,'0.01')^IF($BON_BASE = 0,0,$BON_AWARD_AMT_1 / $BON_BASE * 100)