2010-08-04 16 views
8

कनवर्ट करना मैं छवियों से मेटाडेटा जानकारी निकालने के लिए EXIFextractor नामक लाइब्रेरी का उपयोग कर रहा हूं। भाग में यह lib System.Drawing.Imaging.PropertyItem सभी कड़ी मेहनत करने के लिए उपयोग कर रहा है। प्रॉपर्टीइटम में कुछ डेटा, जैसे छवि विवरण इत्यादि, को माइक्रोसॉफ्ट दस्तावेज के अनुसार बाइट [] में संग्रहीत एएससीआईआई-स्ट्रिंग के रूप में लाया जाता है।सी #: बाइट [] से UTF8 एन्कोडेड स्ट्रिंग

मेरी समस्या यह है कि अंतर्राष्ट्रीय पात्र (å, ä, ö, आदि) को हटा दिया जाता है और प्रश्नों द्वारा प्रतिस्थापित किया जाता है। जब मैं कोड डीबग करता हूं तो यह स्पष्ट होता है कि बाइट [] एक यूटीएफ -8 का प्रतिनिधित्व है।

मैं बाइट [] को यूटीएफ 8-स्ट्रिंग के रूप में पार्स करना चाहता हूं, मैं प्रक्रिया में किसी भी जानकारी को खोए बिना यह कैसे कर सकता हूं?

अग्रिम धन्यवाद!


अद्यतन:

पहले टुकड़ा वर्ग मैं का उपयोग, अर्थात् EXIFextractor.cs द्वारा लिखित से है:

मैं अपने कोड से एक टुकड़ा देने के लिए कहा गया है असिम गोहिर

foreach(System.Drawing.Imaging.PropertyItem p in parr) 
{ 
string v = ""; 

       // ... 

else if(p.Type == 0x2) 
{ 
    // string  
    v = ascii.GetString(p.Value); 
} 

और यह मेरा कोड है जहां मैं टी को संभालने के लिए अपना सर्वश्रेष्ठ प्रयास करता हूं वह उपरोक्त के परिणाम।

   try { 
    EXIFextractor exif = new EXIFextractor(ref bmp, ""); 
    object o; 
        if ((o = exif["Image Description"]) != null) 
         MediaFile.Description = Tools.UTF8Encode(o.ToString()); 

मैं भी मेरा कीमती Å, ä, डेटा से ö हो रही करने के अन्य तरीकों के एक जोड़े की कोशिश की है, लेकिन कुछ भी चाल करने के लिए लगता है। मुझे लगता है कि हंस पासेंट अपने जवाब में उनके निष्कर्षों के बारे में सही है।

+0

यदि जानकारी ASCII एन्कोडिंग का उपयोग करके पढ़ी जाती है, तो किसी भी गैर-ASCII वर्ण परिणामस्वरूप सही ढंग से नहीं पढ़े जाएंगे। एन्कोडिंग वाले वर्णों का यह पठन और फिर बाइट सरणी में लिखना सही नहीं लगता है। क्या आप दस्तावेज से लिंक कर सकते हैं जो कहता है कि यह मामला है? –

+1

यहां यह है, अगर मुझे एक और हाइपरलिंक पोस्ट करने की अनुमति है :) http://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.type.aspx – dotmartin

उत्तर

32
string yourText = System.Text.Encoding.UTF8.GetString(yourByteArray); 
+1

त्वरित उत्तर के लिए धन्यवाद। हालांकि मैंने पहले ही यह कोशिश की है। कोई भाग्य नहीं। मुझे आश्चर्य हो रहा है कि क्या स्रोत (छवि फ़ाइलें) पहली जगह सही ढंग से एन्कोड किए गए हैं। – dotmartin

+0

यदि आप एक उदाहरण साझा कर सकते हैं, तो हम स्वयं की जांच कर सकते हैं या कोशिश कर सकते हैं। – Scoregraphic

+1

बेशक। चूंकि मैं इस पर नया हूं, क्या मैं इसे एक उत्तर या टिप्पणी में प्रदान करूंगा या ऐसा करने का पसंदीदा तरीका क्या होगा? – dotmartin

4

ऑब्जेक्ट पर GetString विधि का उपयोग करें।

1

शायद आप एक और एन्कोडिंग आज़मा सकते हैं? यूटीएफ 16, यूनिकोड? यदि आप सुनिश्चित नहीं हैं कि यह पहली जगह में एन्कोड सही है तो किसी अन्य exif पाठक के साथ exif मेटाडेटा देखने का प्रयास करें।

2

हां, यह ऐप या कैमरा के साथ एक समस्या है जिसने छवि की उत्पत्ति की है। EXIF मानक के पाठ के लिए भयानक समर्थन है, इसे एएससीआईआईआई में एन्कोड किया जाना है। जब फोटोग्राफर अंग्रेजी बोलता है तो वह कभी भी अच्छी तरह से काम करता है। इसमें कोई संदेह नहीं है कि छवि को एन्कोड करने वाला सॉफ़्टवेयर इस आवश्यकता को अनदेखा कर रहा है। प्रॉपर्टीइटम क्लास भी यही कर रहा है, यह मार्शल.स्टिंग टीओएच ग्लोबलएन्सी() के साथ बाइट [] को स्ट्रिंग को एन्कोड करता है, जो सिस्टम के डिफ़ॉल्ट कोड पेज को मानता है।

इसके लिए कोई स्पष्ट फिक्स नहीं है, जब आप अपनी मशीन से बहुत दूर फोटो बनाते हैं तो आपको मोजिबैक मिल जाएगा।

+1

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

+0

क्या यह अभी भी सच है कि बाइट-सरणी में सभी बाइट्स आपके लोकेल के अनुसार सही हैं? यदि ऐसा है, तो आप यूटीएफ 8/एएससीआई के बजाय अपने लोकेल का उपयोग करके एन्कोडिंग/डिकोडिंग करने का प्रयास कर सकते हैं। Http://msdn.microsoft.com/en-us/library/system.text.encoding.getencoding.aspx – Scoregraphic

+0

कोई भाग्य नहीं देखें। मुझे अभी भी प्रश्न मिलते हैं। – dotmartin

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