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

标签 java string arrays

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

s:12:"NUL*NUL_messages"; 

我想将其在 Java 中转换为字符串:

String str = new String(sd);

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

s:12:"*_messages"; 

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

最佳答案

NULL字符串输出内部代表代码点为零的字符。您的字符串相当于:

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

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

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

打印 ( demo )

12
*_messages

comment: This does not work with the serialized-php-parser

该解析器的问题在于它的 parseString方法第 156 行期望打印字符串的长度与 s:<length>: 中的字符数匹配。构造。自声明<length>是12但实际长度只有10,parseString在第 175..176 行消耗了流中的两个额外字符,破坏了其他所有内容。

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

关于java - 将包含 NULL 的字节数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288113/

相关文章:

java - 检索详细信息,例如 MCC、MNC、LAC、CellID

c# - 我如何从 ASP.NET 中的 URL 获取特定值

c++ - 二维数组动态分配C++

Java性能: private static final String vs local String ?堆空间中创建的对象数量

arrays - 设置名词集时,如何在 Bash 中将 "-@-expand ("${array[@]}") 可能为空数组?

Python/NumPy 第一次出现子数组

java - WebMvcTest 与真实服务实现

java - JDK 似乎已安装,但未被检测到并且命令不起作用

java - 此代码为 Integer.parseInt(data[2]) 行抛出异常

c++ - 获取线路如何工作?