java - Escape de byte nulo junto a dos ceros
unicode-escapes (3)
Darth Android tiene la solución, pero esta es la razón por la que sus intentos no funcionaron como esperaba.
La razón por la que el carácter nulo está representado por /0
no es porque es una secuencia de escape especial solo para el carácter nulo; es porque es una secuencia de escape octal de hasta 3 dígitos octales .
Su cadena "ustar/000"
tiene 1 carácter nulo en el extremo, /000
, y su cadena "ustar/0/00"
tiene 2 caracteres nulos en el extremo, /0
y /00
.
La solución es la mencionada anteriormente por Darth Android: use un escape Unicode , que tiene exactamente 4 dígitos hexadecimales, de modo que los 0
caracteres adicionales son solo eso: 0
caracteres. El /u0000
es el carácter nulo, y el quinto y sexto 0
s son caracteres literales 0
.
Necesito escapar de la siguiente secuencia definida como una final estática
final String POSIX_SIGNATURE = "ustar".concat("/0").concat("00");
¿Cómo podría escapar de esto sin usar el método .concat()
ni el operador de cadena +
?
final String POSIX_SIGNATURE = "ustar/000";
Esto no es válido, no es lo mismo que el primero.
final String POSIX_SIGNATURE = "ustar/0/00";
Tampoco es éste.
También puedes usar
"ustar/00000"
/
puede ir seguido de hasta 3 dígitos octales (entre 000
y 377
), por lo que es /000
seguido de "00"
.
Alternativamente, podrías hacer
"ustar/0/600"
Esto es /0
seguido de /60
(octal para ''0''
) seguido de ''0''
.
Utilice una secuencia de escape Unicode:
"/u000000"
Este es el carácter NUL ( /u0000
), seguido de dos 0.