2010-01-05 17 views
11

जब हम 'open' जैसे लिनक्स में सिस्टम कॉल का आह्वान करते हैं या 'fopen' जैसे स्टडीओ फ़ंक्शन को हमें 'const char * filename' प्रदान करना होगा। मेरा सवाल यह है कि यहां इस्तेमाल किया गया एन्कोडिंग क्या है? यह utf-8 या ascii या iso8859-x है? क्या यह सिस्टम या पर्यावरण सेटिंग पर निर्भर करता है?फॉपेन या खुले होने पर क्या एन्कोडिंग का उपयोग किया जाता है?

मुझे एमएस विंडोज़ में पता है कि _wopen है जो utf-16 स्वीकार करता है।

+0

संबंधित: http://serverfault.com/questions/87055/change-filesystem-encoding-to-utf-8-in-ubuntu –

उत्तर

6

यह एक बाइट स्ट्रिंग है, व्याख्या विशेष फाइल सिस्टम पर निर्भर है।

6

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

+1

ध्यान दें कि उन फ़ाइलों को रखना संभव है जिनके नाम अन्य एन्कोडिंग में एन्कोड किए गए हैं सिस्टम डिफ़ॉल्ट, उदाहरण के लिए यदि आप एक संग्रह (टैरबॉल, ज़िप, इत्यादि) को असंप्रेषित करते हैं जो आपके द्वारा किसी भिन्न एन्कोडिंग वाले किसी के द्वारा पैक किया गया था। – alvherre

+1

वास्तव में, यह बहुत सच है। क्या हम नहीं चाहते कि हर कोई यूटीएफ -8 का इस्तेमाल करे? –

3

फ़ाइल लिनक्स पर कॉल एन्कोडिंग-अज्ञेयवाद कर रहे हैं, यानी वे (करने की जरूरत है) नहीं है विशेष एन्कोडिंग के बारे में पता है। जहां तक ​​वे चिंतित हैं, फ़ाइल नाम तर्क द्वारा इंगित बाइट-स्ट्रिंग फाइल सिस्टम के रूप में पास की गई है। फाइल सिस्टम से उम्मीद है कि फाइलनाम सही एन्कोडिंग में हैं (आमतौर पर यूटीएफ -8, जैसा मैथ्यू टैलबर्ट द्वारा उल्लिखित है)।

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

0

मैंने इस विषय पर कुछ और पूछताछ की और निष्कर्ष निकाला कि दो अलग-अलग तरीकों से फ़ाइल नाम एन्कोडिंग को यूनिक्सॉयड फाइल सिस्टम द्वारा कैसे नियंत्रित किया जा सकता है।

  1. फ़ाइल नाम "sytem स्थान" है, जो आम तौर पर है, लेकिन वर्तमान माहौल लोकेल कि locale आदेश से परिलक्षित होता है के रूप में ही नहीं की जरूरत में इनकोड (लेकिन एक वैश्विक विन्यास फाइल में कुछ पूर्व निर्धारित)।

  2. फ़ाइल नाम, UTF-8 में इनकोड किसी भी स्थान सेटिंग्स से स्वतंत्र।

जीटीके + UTF-8 संभालने और या तो वर्तमान स्थान एन्कोडिंग या एक उपयोगकर्ता के आपूर्ति की एन्कोडिंग करके उसे ओवरराइड करने की अनुमति देकर इस गंदगी को हल करती है।

क्यूटी लोकेल एन्कोडिंग (और वह सिस्टम लोकेल वर्तमान लोकेल में दिखाई देता है) को मानकर हल करता है और इसे उपयोगकर्ता द्वारा प्रदत्त रूपांतरण फ़ंक्शन के साथ ओवरराइड करने की अनुमति देता है।

तो नीचे की रेखा है: या तो यूटीएफ -8 या एलसी_ALL या LANG डिफ़ॉल्ट रूप से आपको बताएं, और कम से कम अन्य विकल्प के लिए ओवरराइड सेटिंग प्रदान करें।