将包含NULL的字节数组转换为字符串

时间:2013-08-17 11:10:25

标签: java string bytearray

到后台:我从MYSQL数据库中得到一个byte []字符串,如下所示:

s:12:"NUL*NUL_messages"; 

我希望将Java转换为字符串:

String str = new String(sd);

但现在字符串只包含10个字符:

s:12:"*_messages"; 

但它需要有12个字符才能进行以下解析。有人可以帮助我做什么,以便不删除“NUL”字节?

1 个答案:

答案 0 :(得分:2)

字符串输出中的

NULL代表代码点为零的字符。你的字符串等同于:

String s = "\0*\0_messages";

在Java中\0是不可打印的。但是,字符串会保留它 - 如果检查字符串的长度,它是12而不是10,尽管在将字符串输出到控制台时只打印了10个字符:

System.err.println(s.length());
System.err.println(s);

打印(demo

12
*_messages
  

评论:这不适用于serialized-php-parser

该解析器的问题在于其parseString方法(第156行)要求打印字符串的长度与s:<length>:构造中的字符数相匹配。由于声明的<length>为12,但实际长度仅为10,parseString会在第175..176行的流中消耗两个额外的字符,从而打破其他所有字符。

如果您希望继续使用该解析器,请考虑在编码字符串之前将'\0'字符替换为您不使用的其他可打印字符(例如下划线),然后放置'\0'回到解析的另一边。