2008-11-25 15 views
7

मेरे पास कई फाइलें हैं जो कई अलग-अलग भाषाओं में हैं। मैंने सोचा कि वे सभी यूटीएफ -8 एन्कोड किए गए थे, लेकिन अब मुझे इतना यकीन नहीं है। कुछ पात्र ठीक दिखते हैं, कुछ नहीं करते हैं। क्या कोई तरीका है कि मैं तारों को तोड़ सकता हूं और चरित्र सेटों की पहचान करने की कोशिश करता हूं? शायद सफेद जगह पर विभाजित हो तो प्रत्येक शब्द की पहचान करें? अंत में, क्या एक सेट से यूटीएफ -8 में वर्णों का अनुवाद करने का कोई आसान तरीका है?मैं स्ट्रिंग के वर्ण सेट को कैसे निर्धारित करूं?

उत्तर

6

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

अपने प्रश्न चरित्र सेट के बीच परिवर्तित करने के लिए कैसे के लिए के रूप में: Encode वहाँ के लिए आप

6

निर्धारण है कि क्या एक फ़ाइल शायद UTF-8 है या ऐसा नहीं करने के लिए बहुत आसान होना चाहिए। एन्कोडिंग निर्धारित करना यदि यह यूटीएफ -8 नहीं है तो सामान्य रूप से बहुत मुश्किल होगा।

यदि फ़ाइल यूटीएफ -8 के साथ एन्कोड किया गया है, तो प्रत्येक बाइट के उच्च बिट्स को पैटर्न का पालन करना चाहिए। यदि कोई चरित्र एक बाइट है, तो इसका उच्च बिट साफ़ हो जाएगा (शून्य)। अन्यथा, एक n बाइट वर्ण पहले बाइट एक करने के लिए सेट, एक भी शून्य बिट के बाद की उच्च n बिट्स होगा (जहां n 2 – 4 है)। निम्नलिखित n - 1 बाइट्स में सभी को उच्चतम बिट सेट होना चाहिए और दूसरी-उच्चतम बिट साफ़ होनी चाहिए।

यदि आपकी फ़ाइल में सभी बाइट्स इन नियमों का पालन, यह शायद UTF-8 के साथ इनकोडिंग है। मैं शायद कहते हैं, क्योंकि किसी को भी नई एन्कोडिंग है कि एक ही नियम, जानबूझकर या संयोग से पालन करने के लिए होता है, लेकिन अलग ढंग से कोड की व्याख्या का आविष्कार कर सकते हैं।

ध्यान दें कि एक फ़ाइल US-ASCII साथ इनकोडिंग इन नियमों का पालन करेंगे, लेकिन हर बाइट की उच्च बिट शून्य है। यह UTF-8 के रूप में इस तरह के एक फ़ाइल के इलाज के लिए ठीक है क्योंकि वे इस श्रेणी में संगत हैं। अन्यथा, यह कुछ अन्य एन्कोडिंग है, और एन्कोडिंग को अलग करने के लिए एक अंतर्निहित परीक्षण नहीं है। अनुमान लगाने के लिए आपको कुछ प्रासंगिक ज्ञान का उपयोग करना होगा।

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

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