Boş baytları (ASCII 0x00) Windows'ta panoya kopyalamanın herhangi bir yolu var mı?


14

Boş baytlar (ASCII 0x00) Windows'ta kopyalanamaz (Ctrl + C-mümkün). Bunu göstermek için tarayıcınızın geliştirici konsolunu açın ve yapın console.log('a\x00b'). Ortaya çıkan dizeyi bir Windows 8 makinesine (ve muhtemelen Windows'un diğer sürümlerine de) yapıştırmaya çalışırsanız, yalnızca akopyaların kopyalandığını görürsünüz . \x00Ondan sonra ve her şey göz ardı edilir.

Boş bayt içeren bir dizenin tamamını kopyalamanın bir yolu var mı? Pano boş bayt tutabilir mi?

(Yardımcı soru: null baytlar neden kopyalanamıyor? Örneğin, bunun güvenlikle ilgili bir nedeni var mı, yoksa sadece Windows aptal mı?)


iyi soru .. panoya koyarak olup olmadığını görmek için ilginç olun C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
xxd

unxutils gclip ve pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> < kullanarak - null'ların panoya gidip gitmediğini ya da içeri girip girmediklerini ancak yapıştırmadıklarını net değil.
barlop

2
Zincirin bir yerinde, bir program null sonlu dize işlevleri / gösterimleri (yani C dize işlevleri) kullanıyor. Çok yaygın. Bu tür şeyleri yetersiz anlıyorum, "dize", çoğunlukla dize uzunluğu ve arabellek taşması (??) yanlış tanımlama potansiyeli nedeniyle, null değerleri gömme ile ilgili potansiyel güvenlik sorunları vardır.
Yorik

Bu bir bilinmez: Bir JPG'nin içeriğini panoya kopyaladım ve geri okuduğumda, panonun metin tabanlı olduğunu gösteren ilk boşta kesildi. Yine de, grafik paketleri arasında sorunsuz bir şekilde görüntü dökümü yapabilir veya kesip yapıştırabilirim.
AFH

Sanırım kullanılan biçime bağlı. Pano farklı formatları destekler. Metin kopyalarsanız, dize sonlandırıcı olarak kullanıldıkları için büyük olasılıkla boş karakterler desteklenmez. İkili pano biçimi kullanıyorsanız, boş baytları kopyalayıp yapıştırabilirsiniz.
Alexey Ivanov

Yanıtlar:


10

Hayır, panoya katıştırılmış boş karakter içeren metin koyamazsınız. Standart Windows pano formatları listesine bakalım . Genellikle metin olarak anlaşılan şeyleri tutan birkaç biçim vardır:

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

Bunların her birinin tanımında şu cümle vardır:

Boş karakter verinin sonunu gösterir.

Şimdi, CF_UNICODETEXT verilerini UTF-16LE olarak tutar , bu nedenle büyük olasılıkla bazı boş baytlara sahip olur , ancak boş karakterler (temel olarak arka arkaya iki boş bayt) dizeyi sonlandırır.

Pano metninde null karakterlere neden izin verilmediğine dair spekülasyon yapabiliriz, ancak muhtemelen Windows'ta en sık kullanılan dize işleme işlevlerinin boş bir karakterin sona erdiğini varsayması muhtemeldir. Bir dizenin nerede durduğunu bilmenin diğer tek yolu, uzunluğuna önek eklemektir.

Grafikleri panoda, boş baytları olmasına rağmen tutabilirsiniz, çünkü CF_BITMAPprogramlar tarafından farklı anlaşılması gereken farklı pano formatlarında (örn. ) İletilirler.


Teşekkürler - harika cevap. Windows panosu hakkında kesinlikle iyi şeyler öğrendim.
senshin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.