2016-02-26 6 views
10

कोड के नीचे के लिए C:printf के साथ सी में स्क्रीन करने के लिए मुद्रित utf-8 कोडित स्ट्रिंग कैसा है?

char s[] = "这个问题"; 
printf("%s", s); 

जानता था कि स्रोत फ़ाइल file कमांड के साथ "UTF-8 यूनिकोड सी कार्यक्रम पाठ" है।

संकलन के बाद स्ट्रिंग को कोड किया गया है? .out फ़ाइल में utf-8 भी?

जब द्विआधारी फ़ाइल बाश में निष्पादित की जाती है, तो स्ट्रिंग को स्मृति में कैसे कोड किया जाता है? क्या यह utf-8 भी है?

फिर, कोडिंग योजना को कैसे पता चलता है और सही चरित्र दिखाता है?

अंतिम, अब बैश को पता है कि क्या दिखाना है, लेकिन बाइट्स को स्क्रीन पर पिक्सेल में कैसे अनुवाद किया जाता है? बाइट्स से पिक्सल तक कुछ मैपिंग है?

इन सभी प्रक्रियाओं में, क्या utf-8 का कोई एन्कोडिंग या डिकोडिंग है?

+1

यह काफी सवाल है। ध्यान दें कि बैश, कमांड दुभाषिया खोल, और टर्मिनल एमुलेटर (पाठ दिखाने वाली विंडो) एक ही चीज़ नहीं है। आपका प्रोग्राम बैश से बात नहीं करता है, यह केवल उसी टर्मिनल में बैश के रूप में चलता है (यह मानते हुए कि बैश वह शेल है जिसका उपयोग आप करते हैं)। – unwind

उत्तर

4

जीसीसी मानते हुए, this manual page का कहना है कि पूर्वप्रक्रमक पहले तथाकथित स्रोत चरित्र को भेजे फ़ाइलों के वर्ण सेट का अनुवाद निर्धारित करते हैं, जो जीसीसी के लिए UTF-8 है जाएगा। तो एक यूटीएफ -8 फ़ाइल के लिए, कुछ भी नहीं होता है। डिफ़ॉल्ट निष्पादन वर्ण सेट तब स्ट्रिंग स्थिरांक के लिए उपयोग किया जाता है, और यह डिफ़ॉल्ट रूप से (फिर से, जीसीसी के लिए) यूटीएफ -8 है।

तो आपकी यूटीएफ -8 स्ट्रिंग "जीवित" है और निष्पादन योग्य में यूटीएफ -8 एन्कोडिंग में बाइट्स के समूह के रूप में मौजूद है।

टर्मिनल में एक चरित्र सेट भी है, और इसे मेल करना है, सी प्रोग्राम मुद्रित होने पर तारों का अनुवाद करने के लिए कुछ भी नहीं करता है, वे बाइट के लिए बाइट के रूप में मुद्रित होते हैं। यदि टर्मिनल यूटीएफ -8 के लिए सेट नहीं है, तो आपको कचरा मिल जाएगा।

जैसा कि मैंने एक टिप्पणी में उल्लेख किया है, बैश के पास इसके साथ कुछ लेना देना नहीं है।

+0

तो टर्मिनल को फ़ाइल में मैप किया गया है, और निष्पादन योग्य बाइट को फ़ाइल में io बाधा के साथ लिखता है। टर्मिनल को डिवाइस के रूप में माना जा सकता है, जो बाइट को पिक्सेल से मैप करता है। क्या यह? – heLomaN

+0

और मैपिंग बाइट से पिक्सेल ग्राफिक ड्राइवर द्वारा किया जाता है। – heLomaN

संबंधित मुद्दे