簡體   English   中英

將包含NUL的字節數組轉換為字符串

[英]Converting bytearray containing NUL to string

到背景:我從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);

打印( 演示

12
*_messages

評論:這不適用於serialized-php-parser

該解析器的問題在於它的parseString方法(第156行)期望打印的字符串的長度與s:<length>:構造中的字符數匹配。 由於聲明的<length>為12,但實際長度僅為10,因此parseString在175..176行的流中消耗了兩個額外的字符,破壞了其他所有內容。

如果您想繼續使用該解析器,請考慮在對字符串進行編碼之前,將'\\0'字符替換為您不使用的其他可打印字符,例如下划線,然后將'\\0'放回另一側的解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM