क्या विंडोज पर क्लिपबोर्ड में अशक्त बाइट्स (ASCII 0x00) की नकल करने का कोई तरीका है?


14

नल बाइट्स (ASCII 0x00) विंडोज पर कॉपी करने योग्य (Ctrl + C-सक्षम) नहीं दिखाई देते हैं। इसके प्रदर्शन के लिए, अपने ब्राउज़र के देव कंसोल को खोलें और करें console.log('a\x00b')। यदि आप परिणामी स्ट्रिंग को विंडोज 8 मशीन (और शायद विंडोज के अन्य संस्करण) पर कॉपी-पेस्ट करते हैं, तो आप पाएंगे कि केवल aकॉपी हो जाता है। \x00इसके बाद और सब कुछ ध्यान नहीं दिया जाता।

क्या किसी स्ट्रिंग की संपूर्णता को कॉपी करने का कोई तरीका है जिसमें अशक्त बाइट्स हैं? क्या क्लिपबोर्ड भी अशक्त बाइट पकड़ सकता है?

(सहायक प्रश्न: बाइट्स को क्यों नहीं कॉपी किया जा सकता? उदाहरण के लिए सुरक्षा संबंधी कोई कारण है, या क्या यह केवल विंडोज मूर्खतापूर्ण है?)


अच्छा सवाल .. यह देखने के लिए दिलचस्प है कि क्या इसे क्लिपबोर्ड में डाल दिया गया है xxd नल को आउटपुट कर सकता है C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
20-21 को बारलोप

अनएक्स्यूटिल्स गॉज़ और पाले का उपयोग करना C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- यह मेरे लिए स्पष्ट नहीं है कि नल क्लिपबोर्ड में जा रहे हैं .. या वे बाहर नहीं बल्कि चिपकाने में हैं।
बार्लॉप

2
श्रृंखला में कहीं, एक कार्यक्रम अशक्त-समाप्त स्ट्रिंग फ़ंक्शन / अभ्यावेदन (यानी C स्ट्रिंग फ़ंक्शन) का उपयोग कर रहा है। बहुत ही आम। इस तरह की चीजों के बारे में मेरी समझ "हाँ" है जिसमें एम्बेडिंग नल के साथ संभावित सुरक्षा मुद्दे हैं, ज्यादातर स्ट्रिंग लंबाई और बफर ओवरफ्लो (??) की गलत पहचान की क्षमता के कारण।
योरिक

यह एक गूढ़ है: मैंने एक JPG की सामग्री को क्लिपबोर्ड पर कॉपी किया था, और जब मैंने इसे वापस पढ़ा तो इसे पहले अशक्त पर काट दिया गया था, जो सुझाव देता है कि क्लिपबोर्ड पाठ-आधारित है। फिर भी मैं एक समस्या के बिना ग्राफिक्स पैकेजों के बीच डंप या कट और पेस्ट कर सकता हूं।
AFH

मुझे लगता है कि यह उपयोग किए गए प्रारूप पर निर्भर करता है। क्लिपबोर्ड विभिन्न स्वरूपों का समर्थन करता है। यदि आप पाठ की प्रतिलिपि बनाते हैं, तो वे सबसे अधिक संभावना है कि अशक्त-वर्ण समर्थित नहीं हैं क्योंकि वे स्ट्रिंग टर्मिनेटर के रूप में उपयोग किए जाते हैं। यदि आप एक बाइनरी क्लिपबोर्ड प्रारूप का उपयोग करते हैं, तो आप नल बाइट्स को कॉपी और पेस्ट कर सकते हैं।
एलेक्सी इवानोव

जवाबों:


10

नहीं, आप क्लिपबोर्ड पर एम्बेडेड नल वर्णों के साथ पाठ नहीं डाल सकते। आइए मानक विंडोज क्लिपबोर्ड प्रारूपों की सूची देखें । कुछ प्रारूप हैं जो आमतौर पर पाठ के रूप में समझी जाने वाली चीजों को पकड़ते हैं:

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

उनमें से हर एक की परिभाषा में यह वाक्य है:

एक अशक्त चरित्र डेटा के अंत का संकेत देता है।

अब, CF_UNICODETEXT अपने डेटा को UTF-16LE के रूप में रखता है , इसलिए इसमें संभावना है कि कुछ अशक्त बाइट्स होंगे , लेकिन अशक्त वर्ण (एक पंक्ति में दो नल बाइट्स, मूल रूप से) अभी भी स्ट्रिंग को समाप्त कर देंगे।

हम केवल इस बारे में अनुमान लगा सकते हैं कि क्यों क्लिपबोर्ड पाठ में अशक्त वर्णों की अनुमति नहीं है, लेकिन अधिक संभावना है कि यह सिर्फ इसलिए है क्योंकि विंडोज में सबसे अधिक उपयोग किए जाने वाले स्ट्रिंग प्रसंस्करण कार्य एक अशक्त चरित्र संकेतों को अंत मानते हैं। यह जानने का एकमात्र तरीका है कि एक स्ट्रिंग कहाँ रुकती है, इसकी लंबाई के साथ इसे उपसर्ग करना होगा।

आप क्लिपबोर्ड पर ग्राफिक्स पकड़ सकते हैं, भले ही उनके पास शून्य बाइट्स हों, क्योंकि वे अलग-अलग क्लिपबोर्ड स्वरूपों (जैसे CF_BITMAP) में चारों ओर से गुजरते हैं , जिन्हें कार्यक्रमों द्वारा अलग-अलग तरीके से समझना पड़ता है।


साभार - शानदार जवाब मैंने निश्चित रूप से विंडोज क्लिपबोर्ड के बारे में कुछ अच्छी चीजें सीखीं।
ससंहिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.