Esiste un modo per copiare byte null (ASCII 0x00) negli Appunti su Windows?


14

I byte null (ASCII 0x00) non sembrano essere copiabili (Ctrl + C-grado) su Windows. Per una dimostrazione di ciò, apri la console di sviluppo del tuo browser ed esegui console.log('a\x00b'). Se provi a copiare e incollare la stringa risultante su una macchina Windows 8 (e probabilmente anche altre versioni di Windows), scoprirai che solo le acopie vengono copiate. Il \x00e tutto dopo viene ignorato.

Esiste un modo per copiare l'intera stringa che contiene byte null? Gli appunti possono contenere anche byte nulli?

(Domanda ausiliaria: perché non è possibile copiare byte null? Ad esempio, c'è un motivo legato alla sicurezza per questo, o è solo che Windows è sciocco?)


bella domanda .. sii interessante vedere se lo sta inserendo negli appunti xxd può generare C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
valori

usando unxutils gclip e pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- non mi è chiaro se i nulli stanno andando negli appunti ... o se sono dentro ma non si incollano.
barlop

2
Da qualche parte nella catena, un programma sta usando funzioni / rappresentazioni di stringa con terminazione null (cioè funzioni di stringa C). Molto comune. La mia scarsa comprensione di queste cose è "sì", ci sono potenziali problemi di sicurezza con l'inclusione di valori null, principalmente a causa del potenziale errore di identificazione della lunghezza della stringa e del buffer overflow (??).
Yorik,

È un rompicapo: ho copiato il contenuto di un JPG negli Appunti e quando l'ho letto è stato troncato al primo null, il che suggerisce che gli Appunti sono basati su testo. Eppure posso schermare il dump o tagliare e incollare le immagini tra i pacchetti grafici senza problemi.
AFH,

Immagino che dipenda dal formato utilizzato. Appunti supporta diversi formati. Se copi del testo, molto probabilmente i loro caratteri null non sono supportati perché sono usati come terminatori di stringhe. Se si utilizza un formato di appunti binario, è possibile copiare e incollare byte null.
Alexey Ivanov,

Risposte:


10

No, non è possibile inserire negli appunti testo con caratteri null incorporati. Diamo un'occhiata all'elenco dei formati standard di appunti di Windows . Ci sono alcuni formati che tengono le cose generalmente intese come testo:

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

Ognuno di questi ha questa frase nella sua definizione:

Un carattere null indica la fine dei dati.

Ora, CF_UNICODETEXT mantiene i suoi dati come UTF-16LE , quindi avrà più che probabilmente dei byte nulli , ma i caratteri null (due byte nulli in una riga, in sostanza) faranno comunque terminare la stringa.

Possiamo solo ipotizzare il motivo per cui i caratteri null non sono ammessi nel testo degli appunti, ma molto probabilmente è solo perché le funzioni di elaborazione delle stringhe più comunemente utilizzate in Windows assumono che un carattere null segnali la fine. L'unico altro modo per sapere dove si ferma una stringa sarebbe prefissarla con la sua lunghezza.

Puoi conservare la grafica negli appunti anche se probabilmente hanno byte nulli perché vengono passati in diversi formati di appunti (ad esempio CF_BITMAP), che devono essere compresi in modo diverso dai programmi.


Grazie - ottima risposta. Ho sicuramente imparato alcune cose buone sugli appunti di Windows.
senshin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.