转义两个零旁边的空字节

Escaping null byte next to two zeroes

我需要转义以下定义为静态最终的序列

final String POSIX_SIGNATURE = "ustar".concat("[=10=]").concat("00");

如何在不使用 .concat() 方法或 + 字符串运算符的情况下转义?

final String POSIX_SIGNATURE = "ustar[=11=]0"; 

这个无效,和第一个不一样

final String POSIX_SIGNATURE = "ustar[=12=][=12=]"; 

这个也不是。

使用 unicode 转义序列:

"\u000000"

这是 NUL 字符 (\u0000),后跟两个 0。

Darth Android 有解决方案,但这就是您的尝试没有达到预期效果的原因。

空字符用[=10=]表示的原因并不是因为它是空字符的特殊转义序列;这是因为它是 octal escape sequence of up to 3 octal digits.

您的字符串 "ustar[=11=]0" 末尾有 1 个空字符,[=12=]0,您的字符串 "ustar[=13=][=13=]" 末尾有 2 个空字符,[=10=][= 15=].

解决方案如 Darth Android 之前提到的那样——使用 Unicode escape,它恰好有 4 个十六进制数字,因此额外的 0 个字符就是 -- 0 个字符。 \u0000 是空字符,第 5 个和第 6 个 0 是文字 0 个字符。

您也可以使用

"ustar[=10=]000"

\ 后面最多可以跟 3 个八进制数字(在 000377 之间),所以这是 [=15=]0 后面跟着 "00"

或者,您可以这样做

"ustar[=11=]0"

这是 [=17=],然后是 </code>(<code>'0' 的八进制),然后是 '0'