Java 将长字符串转换为乱码字符串

Java 将长字符串转换为乱码字符串,java,hbase,Java,Hbase,我现在想在HBase(在线数据库)中查询一条记录,以验证我编写的一个函数。但在我的公司,我没有访问在线数据库的权限。因此,我必须将行键(字符串类型)交给运维工程师,让他为我查询 我已经阅读了应用程序代码,它生成的行键的类型是byte[],因此我将其转换为字符串 byte[] result = consumeRecordRowKey.toBytes(); String resultString = new String(result); 但它似乎是这样的,它是乱七八糟的: 它使用defaule

我现在想在HBase(在线数据库)中查询一条记录,以验证我编写的一个函数。但在我的公司,我没有访问在线数据库的权限。因此,我必须将行键(字符串类型)交给运维工程师,让他为我查询

我已经阅读了应用程序代码,它生成的行键的类型是byte[],因此我将其转换为字符串

byte[] result = consumeRecordRowKey.toBytes();
String resultString = new String(result);
但它似乎是这样的,它是乱七八糟的:

它使用defaule编码类型生成byte[],所以我也使用默认编码。 运维工程师说他不能用这个字符串进行查询。那么,我能做些什么来解决这个问题呢

更新: consumerRecordRowKey.toBytes()执行以下操作: 它合并了两个字节数组,两个字节数组是:

byte[] array1 = Bytes.toBytes("2088301654230372");
byte[] array2 = Bytes.toBytes(9223370625843459807);//convert a long value

乱码是由长值转换的字节。我想知道,如何将长值转换为字节[],并从中获取正常字符串?

可能您和字节[]的创建者有不同的默认区域设置。你应该让他告诉你他的默认语言环境

 System.out.println(Charset.defaultCharset());
或者通过更新代码来同步您的区域设置

 string.toByteArray(STANDARD_CHARSET_OF_YOUR_CHOOSING);
在他这边

 new String(bytes, STANDARD_CHARSET_OF_YOUR_CHOOSING);

在您的上。

密钥中似乎有多字节字符,在这种情况下,默认编码可能没有帮助。在字符和字节之间转换时,需要使用“UTF-8”字符。假设ConsumerRecordRowKey是String byte[]result=ConsumerRecordRowKey.getBytes(“UTF-8”)//String resultString=new String(result,“UTF-8”);存储真正应该使用UTF-8之类的代码,而不是默认编码。
Bytes.toBytes
将长二进制数组转换为压缩二进制数组,而压缩二进制数组不是字符编码。听起来您确实想要
Long.toString
,它可以将Long转换为unicode十进制字符串。@ChrisDodd为什么在转换由Bytes.toBytes生成的字节数组时它是乱码字符串?因为它不是字符串--Bytes.toString提供的是一系列字节,而不是一系列字符。如果你把这些字节解释成字符,你会得到一个看起来随机的混乱。有些字节甚至可能不是有效字符。能否给我们组成该字符串的字节[]s?那个乱码输出应该读作什么?