दिलचस्प पोस्ट
क्लाइंट साइड में एक डेस्कटॉप एप्लिकेशन कैसे शुरू करें मैं WPF ListView आइटम को क्षैतिज क्षैतिज स्क्रॉलबार की तरह कैसे दोहराता हूं? HTML ईमेल – क्या colspan अनुमति है? मैं सी # में प्रगति बार कैसे लागू करूं? टाइमस्टैंप को बदलने के बिना git rebase क्या सादे पाठ लौटने के लिए एएसपी.नेट वेब एपीआई को बल देने का एक तरीका है? एक आईसीसी प्रोफ़ाइल का उपयोग सीजीएमके के लिए सी # आरजीबी मूल्य परिवर्तित करें? मैं Django के GenericForeignKey को मॉडल की सूची में कैसे प्रतिबंधित कर सकता हूं? SQL में 100 वर्षों के लिए कैलेंडर तालिका कैसे तैयार करें IOS पर सभी संपर्कों की एक सूची प्राप्त करें रेलिंग वस्तु रिश्ते और JSON प्रतिपादन UIButton को छुआ नहीं जा सकता जबकि एनिमेटेड UIView एनाइटमथडिअरीशन के साथ कैसे जावास्क्रिप्ट के साथ विंडो पूर्ण स्क्रीन बनाने के लिए (स्क्रीन पर सभी को खींच कर) एक विधि को लागू करने पर एक घटना ट्रिगर करने के लिए C # विशेषता ASP.NET कोर में तार करने के लिए रेज़र व्यूएं प्रदान करें

जावा में बाइट के रूप में पाठ की एन्कोडिंग का अनुमान लगाया जा रहा है

कुछ अज्ञात एन्कोडिंग (आमतौर पर यूटीएफ -8 या आईएसओ -885 9 -1, लेकिन जरूरी नहीं कि) में पाठ का प्रतिनिधित्व करने वाले बाइट्स को देखते हुए, जावा में इस्तेमाल की जाने वाली सबसे अधिक एन्कोडिंग के अनुमान लगाने का सबसे अच्छा तरीका क्या है?

ध्यान देने योग्य:

  • कोई अतिरिक्त मेटा-डेटा उपलब्ध नहीं है बाइट सरणी सचमुच ही उपलब्ध इनपुट है
  • पता लगाने के एल्गोरिदम स्पष्ट रूप से 100% सही नहीं होगा। यदि एल्गोरिथ्म सही है तो 80% मामलों के मुताबिक यह सही है कि पर्याप्त है।

Solutions Collecting From Web of "जावा में बाइट के रूप में पाठ की एन्कोडिंग का अनुमान लगाया जा रहा है"

निम्नलिखित विधि juniversalchardet का उपयोग करते हुए समस्या को हल करती है, जो मोज़िला के एन्कोडिंग डिटेक्शन लाइब्रेरी का जावा पोर्ट है।

public static String guessEncoding(byte[] bytes) { String DEFAULT_ENCODING = "UTF-8"; org.mozilla.universalchardet.UniversalDetector detector = new org.mozilla.universalchardet.UniversalDetector(null); detector.handleData(bytes, 0, bytes.length); detector.dataEnd(); String encoding = detector.getDetectedCharset(); detector.reset(); if (encoding == null) { encoding = DEFAULT_ENCODING; } return encoding; } 

उपर्युक्त कोड का परीक्षण किया गया है और वह जानबूझकर काम करता है। बस क्लासपाथ के लिए जॉन्हेरसलवर्ल्ड-1.0.3.जर जोड़ें।

मैंने दोनों जॉन्सरल्चर्ड और जेचर्ड का परीक्षण किया है मेरी सामान्य धारणा यह है कि जुनेस्वरलचर्ड बेहतर पुस्तकालयों की बेहतर पहचान और सटीक एपीआई प्रदान करता है।

अपाचे टिकिका – एक सामग्री विश्लेषण टूलकिट भी है । यह माइम प्रकार का अनुमान लगा सकता है, और यह एन्कोडिंग अनुमान लगा सकता है। आमतौर पर अनुमान बहुत ही उच्च संभावना के साथ सही है।

यहां मेरा पसंदीदा है: http://glaforge.free.fr/wiki/index.php?wiki=GuessEncoding

यह इस तरह काम करता है:

  • यदि कोई यूटीएफ -8 या यूटीएफ -16 बीओएम है, तो उस एन्कोडिंग पर लौटें।
  • अगर बाइट में से कोई भी उच्च-ऑर्डर बिट सेट नहीं करता है, तो ASCII लौटें (या आप इसके बजाय एक डिफ़ॉल्ट 8-बिट एन्कोडिंग वापस करने के लिए बाध्य कर सकते हैं)।
  • यदि उच्च बिट सेट के साथ बाइट हैं लेकिन उन्हें UTF-8 के लिए सही पैटर्न में व्यवस्थित किया गया है, तो UTF-8 लौटाएं।
  • अन्यथा, प्लेटफ़ॉर्म डिफॉल्ट एन्कोडिंग वापस लौटाएं (जैसे, विंडोज़-लोकेल विंडोज सिस्टम पर विंडोज़ 1252)।

यह अतिसंवेदनशील लग सकता है, लेकिन मेरे दिन-प्रतिदिन काम में यह 90% से अधिक सही है।

ची का उत्तर वास्तविक उपयोग के लिए सबसे आशाजनक लगता है मैं सिर्फ यह जोड़ना चाहता हूं, जोएल स्पोलस्की के अनुसार, इंटरनेट एक्सप्लोरर ने अपने दिन में एक आवृत्ति आधारित गलती एल्गोरिदम का इस्तेमाल किया:

http://www.joelonsoftware.com/articles/Unicode.html

मोटे तौर पर बोलते हुए, सभी ग्रहण-से-हो-पाठ को कॉपी किया जाता है, और प्रत्येक एन्कोडिंग में कल्पना की जाती है जो भी पार्स एक भाषा के औसत शब्द (और पत्र?) आवृत्ति प्रोफाइल को सर्वश्रेष्ठ, जीतता है? मैं जल्दी से नहीं देख सकता कि क्या jchardet उसी तरह के दृष्टिकोण का उपयोग करता है, इसलिए मैंने सोचा कि मैं इस मामले में सिर्फ इसका उल्लेख करता हूं।

Jchardet बाहर की जाँच करें

सामान पहले से ही उपलब्ध होना चाहिए

गूगल सर्च आईसीयू 4 जे

या

http://jchardet.sourceforge.net/

एन्कोडिंग सूचक के बिना, आपको कभी भी सुनिश्चित नहीं होना होगा हालांकि, आप कुछ बुद्धिमान अनुमान बना सकते हैं इस सवाल का मेरा जवाब देखें,

यह निर्धारित करने के लिए कि क्या स्ट्रिंग में अमान्य एन्कोडेड वर्ण हैं

ValidUTF8 () विधियों का उपयोग करें अगर यह सच वापस करता है, तो इसे यूटीएफ 8 के रूप में रखें, अन्यथा लैटिन -1 के रूप में