转义两个零旁边的空字节
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 个八进制数字(在 000
和 377
之间),所以这是 [=15=]0
后面跟着 "00"
。
或者,您可以这样做
"ustar[=11=]0"
这是 [=17=]
,然后是 </code>(<code>'0'
的八进制),然后是 '0'
。
我需要转义以下定义为静态最终的序列
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 个八进制数字(在 000
和 377
之间),所以这是 [=15=]0
后面跟着 "00"
。
或者,您可以这样做
"ustar[=11=]0"
这是 [=17=]
,然后是 </code>(<code>'0'
的八进制),然后是 '0'
。