Los bytes nulos (ASCII 0x00) no parecen ser copiables (Ctrl + C-able) en Windows. Para una demostración de esto, abra la consola de desarrollo de su navegador y hágalo console.log('a\x00b')
. Si intenta copiar y pegar la cadena resultante en una máquina con Windows 8 (y probablemente también en otras versiones de Windows), encontrará que solo a
se copia. El \x00
y todo lo demás después se ignora.
¿Hay alguna forma de copiar la totalidad de una cadena que contiene bytes nulos? ¿Puede el portapapeles incluso contener bytes nulos?
(Pregunta auxiliar: ¿por qué no se pueden copiar bytes nulos? Por ejemplo, ¿hay alguna razón relacionada con la seguridad para esto o solo Windows es una tontería?)
windows
copy-paste
clipboard
senshin
fuente
fuente
C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER>
<- no me queda claro si los valores nulos van al portapapeles ... o si están dentro pero no se están pegando.Respuestas:
No, no puede colocar texto con caracteres nulos incrustados en el portapapeles. Veamos la lista de formatos estándar de portapapeles de Windows . Hay algunos formatos que contienen cosas generalmente entendidas como texto:
CF_TEXT
(1)CF_OEMTEXT
(7)CF_UNICODETEXT
(13)Cada uno de esos tiene esta oración en su definición:
Ahora,
CF_UNICODETEXT
mantiene sus datos como UTF-16LE , por lo que es muy probable que tenga algunos bytes nulos , pero los caracteres nulos (dos bytes nulos en una fila, básicamente) aún terminarán la cadena.Solo podemos especular sobre por qué los caracteres nulos no están permitidos en el texto del portapapeles, pero es más que probable que sea solo porque las funciones de procesamiento de cadenas más utilizadas en Windows suponen que un carácter nulo señala el final. La única otra forma de saber dónde se detiene una cadena sería prefijarla con su longitud.
Puede mantener gráficos en el portapapeles aunque probablemente tengan bytes nulos porque se pasan en diferentes formatos de portapapeles (por ejemplo
CF_BITMAP
), que los programas deben entender de manera diferente.fuente