Null bytes (ASCII 0x00) tampaknya tidak dapat disalin (Ctrl + C-mampu) pada Windows. Untuk demonstrasi ini, buka konsol dev browser Anda dan lakukan console.log('a\x00b')
. Jika Anda mencoba dan menyalin-tempel string yang dihasilkan pada mesin Windows 8 (dan mungkin juga versi Windows lainnya), Anda akan menemukan bahwa hanya a
salinan yang disalin. The \x00
dan semuanya setelah itu diabaikan.
Apakah ada cara untuk menyalin keseluruhan string yang berisi byte nol? Dapatkah clipboard bahkan menampung byte nol?
(Pertanyaan tambahan: mengapa byte tidak dapat disalin? Misalnya ada alasan terkait keamanan untuk ini, atau apakah hanya Windows yang konyol?)
windows
copy-paste
clipboard
senshin
sumber
sumber
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>
<- tidak jelas bagi saya apakah nulls masuk ke clipboard .. atau apakah mereka masuk tetapi tidak menempel.Jawaban:
Tidak, Anda tidak dapat meletakkan teks dengan karakter nol yang tertanam di clipboard. Mari kita lihat daftar format clipboard Windows standar . Ada beberapa format yang menyimpan hal-hal yang secara umum dipahami sebagai teks:
CF_TEXT
(1)CF_OEMTEXT
(7)CF_UNICODETEXT
(13)Setiap orang memiliki kalimat ini dalam definisi:
Sekarang,
CF_UNICODETEXT
simpan datanya sebagai UTF-16LE , sehingga kemungkinan besar akan memiliki beberapa byte nol , tetapi karakter null (dua null byte berturut-turut, pada dasarnya) masih akan mengakhiri string.Kami hanya dapat berspekulasi tentang mengapa karakter nol tidak diizinkan dalam teks clipboard, tetapi kemungkinan besar itu hanya karena fungsi pemrosesan string yang paling umum digunakan di Windows mengasumsikan karakter nol memberi sinyal akhir. Satu-satunya cara lain untuk mengetahui di mana string berhenti adalah dengan awalan panjangnya.
Anda dapat menahan grafik pada clipboard meskipun mereka kemungkinan memiliki byte nol karena mereka diedarkan dalam format clipboard yang berbeda (misalnya
CF_BITMAP
), yang harus dipahami secara berbeda oleh program.sumber