到后台:我从MYSQL数据库中得到一个byte []字符串,如下所示:
s:12:"NUL*NUL_messages";
我希望将Java转换为字符串:
String str = new String(sd);
但现在字符串只包含10个字符:
s:12:"*_messages";
但它需要有12个字符才能进行以下解析。有人可以帮助我做什么,以便不删除“NUL”字节?
答案 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'
回到解析的另一边。