Existe alguma maneira de copiar bytes nulos (ASCII 0x00) para a área de transferência no Windows?

9

Bytes nulos (ASCII 0x00) não parecem ser copiáveis (Ctrl + C-able) no Windows. Para uma demonstração disso, abra o console de desenvolvimento do seu navegador e faça console.log('a\x00b') . Se você tentar copiar e colar a string resultante em uma máquina com Windows 8 (e provavelmente outras versões do Windows também), verá que apenas o a é copiado. O \x00 e tudo depois é ignorado.

Existe alguma maneira de copiar a totalidade de uma string que contém bytes nulos? A área de transferência pode até conter bytes nulos?

(Pergunta auxiliar: por que os bytes nulos não podem ser copiados? Por exemplo, há uma razão relacionada à segurança para isso, ou é apenas o Windows ser bobo?)

    
por senshin 28.07.2015 / 21:39

1 resposta

7

Não, você não pode colocar texto com caracteres nulos incorporados na área de transferência. Vamos ver a lista de formatos padrão da área de transferência do Windows . Existem alguns formatos que mantêm as coisas geralmente entendidas como texto:

  • CF_TEXT (1)
  • CF_OEMTEXT (7)
  • CF_UNICODETEXT (13)

Cada um deles tem essa frase em sua definição:

A null character signals the end of the data.

Agora, CF_UNICODETEXT mantém seus dados como UTF-16LE , por isso, é mais provável que tenha algum valor nulo < em> bytes , mas caracteres nulos (dois bytes nulos em uma linha, basicamente) ainda terminarão a string.

Podemos apenas especular sobre por que os caracteres nulos não são permitidos no texto da área de transferência, mas é mais do que provável que seja apenas porque as funções de processamento de strings mais usadas no Windows assumem que um caractere nulo sinaliza o fim. A única outra maneira de saber onde uma string é interrompida seria prefixar seu tamanho.

Você pode manter gráficos na área de transferência, mesmo que eles provavelmente tenham bytes nulos porque são passados em formatos diferentes da área de transferência (por exemplo, CF_BITMAP ), que precisam ser entendidos de forma diferente por programas.

    
por 29.04.2016 / 18:36