2012-09-02 11 views
7

मैं एक फाइल सिस्टम में फ़ाइल नामों के चरित्र एन्कोडिंग को जानना चाहता हूं ताकि उन्हें जीयूआई में सही तरीके से प्रदर्शित किया जा सके।फ़ाइल नामों के वर्ण एन्कोडिंग को कैसे जानें (फाइल सिस्टम के आधार पर)

मुझे यह कैसे करना चाहिए?

मैं मैं अलग वर्ण एन्कोडिंग फ़ाइल सिस्टम के आधार पर (FAT, NTFS, ext3, आदि)

धन्यवाद

(मैं C++ काम करते हैं लेकिन इस विषय से संबंधित भाषा नहीं है)

मिल लगता है
+2

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

+0

यह वास्तव में एपीआई पर निर्भर करता है, और इस प्रकार आप प्लेटफ़ॉर्म (ओएस) का उपयोग कर रहे हैं। हालांकि, सी ++ 17 में फाइल सिस्टम मानक पुस्तकालय पूर्ण और शामिल हो सकता है, जो शायद किसी भी तरह से इस समस्या को हल करना चाहिए। –

उत्तर

5

एनटीएफएस यूनिकोड (यूटीएफ -16) है। एक्सएफएटी यूनिकोड भी है।

मूल एफएटी और एफएटी 32 उपयोग OEM चरित्र सेट (MSDN पर और पढ़ें)।

लिनक्स और यूनिक्स फ़ाइल नाम पर एनयूएल को छोड़कर कोई बाइट हो सकता है और चार्टर सेट परिभाषित नहीं किया गया है। नतीजतन प्रत्येक आवेदन खुद का फैसला करता है कि किस का उपयोग करना है। कई अनुप्रयोग यूटीएफ 8 का उपयोग करते हैं। this question में और देखें।

उपरोक्त यूनिक्स दृष्टिकोण अधिकांश फाइल सिस्टम पर उपयोग किया जाता है (मुख्य रूप से क्योंकि "वर्णमाला" अवधारणा भंडारण स्तर की तुलना में ओएस स्तर पर अधिक अर्थ है)। आप फ़ाइल नाम पात्रों here (तालिका 2 कॉलम 3) के संबंध में एफएस क्षमताओं और आवश्यकताओं की जांच कर सकते हैं।

+0

यूनिकोड एक सार प्रस्तुतिकरण नहीं है, एक बाइट प्रतिनिधित्व नहीं है। यूनिकोड को बाइट्स में बदलने के लिए आपको एन्कोडिंग की आवश्यकता है। – user803422

+0

@ user803422 "यूनिकोड" विंडोज में जैसा यूटीएफ 16 है। मैंने जवाब अपडेट कर लिया है। –

+0

मेरी विंडोज 7 पर - एनटीएफएस ड्राइव, फ़ाइल नाम यूटीएफ -8 में हैं। तो यूटीएफ -16 एक सामान्य नियम नहीं है। एमएसडीएन स्पष्टीकरण बल्कि जटिल है। – user803422

0

लिनक्स रन में निम्न आदेश: लोकेल | egrep "LANG =" | कट-डी -एफ 2

यूनिक्स जैसी प्रणालियों पर, फ़ाइल नामों का एन्कोडिंग फाइल सिस्टम स्तर पर सेट नहीं है, बल्कि उपयोगकर्ता वातावरण में। उदाहरण के लिए, यूटीएफ -8 उबंटू में डिफ़ॉल्ट सेटिंग है।

विंडोज डिफ़ॉल्ट एन्कोडिंग पर सीपी -1252 (AKA आईएसओ -885 9 -1 या लैटिन -1) है, लेकिन एफएस यूटीएफ -16 एन्कोडिंग के माध्यम से यूनिकोड का उपयोग करता है। http://en.wikipedia.org/wiki/Filename देखें।

लेकिन यदि आप क्यूटी का उपयोग करते हैं, तो आप क्यूटी निर्माता के साथ निम्नलिखित निर्माण कर सकते हैं और परिणाम वर्तमान उपयोगकर्ता एन्कोडिंग नाम हो सकते हैं।

#include <QTextCodec> 
#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    Q_UNUSED(argc); Q_UNUSED(argv); 
    QTextCodec* tc = QTextCodec::codecForLocale(); 

    cout << "Current names text codec: " << tc->name().data() << endl; 
    return 0; 
} 
+1

आईएसओ 885 9 -1 और लैटिन -1 एक ही बात है, लेकिन विंडोज -1252/सीपी -1252 थोड़ा अलग है: "यह एन्कोडिंग आईएसओ 885 9 -1 का सुपरसैट है, लेकिन आईएएनए के आईएसओ -885 9 -1 से अलग है 80 से 9 एफ (हेक्स) रेंज में वर्णों को नियंत्रित करने के बजाय प्रदर्शित करने योग्य वर्णों का उपयोग करना। " - [विकिपीडिया] (http://en.wikipedia.org/wiki/Windows-1252) –

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