2012-05-21 14 views
5

की फ़िक्स एन्कोडिंग मेरे पास एक लंबी टेक्स्ट फ़ाइल है जो पाठ के बाद के ब्लॉक (आईएसओ या यूटीएफ -8) में स्पष्ट रूप से अलग-अलग एन्कोडिंग का उपयोग करती है। यह >> file.bib का उपयोग कर पाठ जोड़ने का परिणाम है और विभिन्न स्रोतों (वेबपृष्ठों) से कॉपी और पेस्ट करें।अनौपचारिक रूप से एन्कोडेड टेक्स्ट फ़ाइल

ब्लॉक सिद्धांत रूप में के रूप में वे bibtex प्रविष्टियों

@article{key, author={lastname, firstname}, ...} 

मैं इसे एक सुसंगत utf-8 फ़ाइल में रूपांतरित करने के बाद से यह मेरी BibTeX दर्शक (kbibtex) दुर्घटना करने लगता है चाहते हैं प्रतिष्ठित किया जा सकता। मुझे पता है कि मैं पूरी फाइलों के एन्कोडिंग को कन्वर्ट करने के लिए iconv का उपयोग कर सकता हूं, लेकिन मैं जानना चाहता हूं कि कुछ प्रविष्टियों को दूषित किए बिना मेरी फ़ाइल को ठीक करने का कोई तरीका है या नहीं।

+4

अधिक जानकारी दें, देखें [मिश्रित-एन्कोडिंग फ़ाइल को पर्ल में यूटीएफ 8 में परिवर्तित करने के बारे में प्रश्न] (http://stackoverflow.com/questions/6897982/questions-about-converting-a- मिश्रित-encoding-file- to-utf8-in-perl) तुलना के लिए कौन सी जानकारी उपयोगी है। – daxim

+0

आपको फ़ाइल को अलग-अलग HTML दस्तावेज़ों में विभाजित करके प्रारंभ करना चाहिए। फिर आप बीओएम के लिए और HEAD तत्व में एक वर्णमाला के लिए प्रत्येक दस्तावेज़ की जांच कर सकते हैं। – ikegami

उत्तर

3

आप प्रत्येक पंक्ति के लिए वर्दी एन्कोडिंग मान तो कर सकते हैं और आप वैकल्पिक एन्कोडिंग पता:

#!/usr/bin/perl 
use Encode; 
while(<>) { 
     my $line; 
     eval { 
     $line=Encode::decode_utf8($_); 
     } 
     if ([email protected]) $line=Encode::decode('iso-8859-1', $_); #not UTF-8 
     # Now $line is UNICODE.Do something to it 

} 

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

+2

यह यूटीएफ -8 और आईएसओ -885 9 -1 के बीच है, 'fix_latin' टूल का उपयोग करें जो [एन्कोडिंग :: फिक्सलैटिन] (http://search.cpan.org/perldoc?Encoding::FixLatin) के साथ आता है एलियन लाइफ फॉर्म का कोड। – ikegami

3

मैं इसके लिए विम का उपयोग करता हूं, लेकिन मुझे लगता है कि यह किसी भी संपादक में किया जा सकता है।

  • चुनें (शिफ्ट + वी) टेक्स्ट का एक ब्लॉक जिसे आप एन्कोडिंग बदलना चाहते हैं।

  • प्रकार: ENCA एल लैंग - (अपनी भाषा के साथ 'लैंग' की जगह ले, मैं का उपयोग करें 'ENCA एल सीएस' ENCA उपयोगिता तो आप चयनित ब्लॉक की सबसे संभावित एन्कोडिंग बताना चाहिए।)

  • ! !

    प्रेस यू चल

  • (ताकि आप उस अपने पाठ में दिखाई दिया ENCA के जवाब पूर्ववत) ब्लॉक फिर से का चयन करें, इस समय: iconv -f determined_encoding आयकर UTF-8

ध्यान दें कि vim स्वचालित रूप से दबाया विस्तार: तक: \ <,> जब आप दृश्य मोड में होते हैं, तो वही है जो आप पाठ ब्लॉक पर प्रोग्राम चलाने के लिए चाहते हैं।

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