Puste bajty (ASCII 0x00) nie wydają się być kopiowalne (Ctrl + C-zdolne) w systemie Windows. Aby to zademonstrować, otwórz konsolę programistyczną przeglądarki i zrób to console.log('a\x00b')
. Jeśli spróbujesz skopiować i wkleić wynikowy ciąg na komputerze z systemem Windows 8 (i prawdopodobnie także w innych wersjach systemu Windows), przekonasz się, że tylko a
pliki zostaną skopiowane. \x00
A wszystko po to jest ignorowany.
Czy istnieje sposób na skopiowanie całego łańcucha zawierającego bajty zerowe? Czy schowek może pomieścić nawet bajty zerowe?
(Pytanie pomocnicze: dlaczego nie można skopiować bajtów zerowych? Np. Czy jest to uzasadniony względami bezpieczeństwa, czy tylko Windows jest głupi?)
windows
copy-paste
clipboard
senshin
źródło
źródło
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>
<- nie jest dla mnie jasne, czy wartości null idą do schowka .. czy też są, ale nie wklejają się.Odpowiedzi:
Nie, nie można umieszczać tekstu ze osadzonymi znakami null w schowku. Spójrzmy na listę standardowych formatów schowka Windows . Istnieje kilka formatów, które przechowują rzeczy ogólnie rozumiane jako tekst:
CF_TEXT
(1)CF_OEMTEXT
(7)CF_UNICODETEXT
(13)Każdy z nich ma w swojej definicji to zdanie:
Teraz
CF_UNICODETEXT
zachowuje swoje dane jako UTF-16LE , więc bardziej niż prawdopodobne będzie, że będzie miał puste bajty , ale znaki puste (w zasadzie dwa bajty puste w rzędzie) nadal kończą łańcuch.Możemy jedynie spekulować, dlaczego znaki puste są niedozwolone w tekście schowka, ale bardziej niż prawdopodobne jest to tylko dlatego, że najczęściej używane funkcje przetwarzania ciągów w systemie Windows zakładają, że znak null sygnalizuje koniec. Jedynym innym sposobem, aby dowiedzieć się, gdzie łańcuch się zatrzymuje, jest poprzedzenie go długością.
Możesz przechowywać grafikę w schowku, mimo że prawdopodobnie mają puste bajty, ponieważ są one przekazywane w różnych formatach schowka (np.
CF_BITMAP
), Które muszą być różnie rozumiane przez programy.źródło