2012-05-08 10 views
5

के साथ यूनिक्स एन्कोडेड फ़ाइल पढ़ें मेरे पास सी # प्रोग्राम है जिसे हम कुछ मानों को प्रतिस्थापित करने के लिए उपयोग करते हैं, पैरामीटर के बाद उपयोग किए जाने के लिए। 'NAME1' की तरह & 1, & 2 के साथ 'NAME2' के साथ प्रतिस्थापित किया गया है, और इसी तरह।सी #

समस्या यह है कि संशोधित करने वाला डेटा यूनिक्स पर एन्कोड किए गए टेक्स्ट फ़ाइल पर है, और विशेष वर्ण जैसे í, जो स्मृति पर भी, वर्ग (अमान्य चार) के रूप में पढ़ा जाता है। मेरे नियंत्रण से बाहर होने वाले विनिर्देशों के कारण, फ़ाइल को बदला नहीं जा सकता है और इसे पढ़ने के अलावा कोई अन्य विकल्प नहीं है।

मैं के साथ 130 एन्कोडिंग सी # के सबसे मेरे साथ प्रदान करता है पढ़ने के लिए tryed है:

EncodingInfo[] info = System.Text.Encoding.GetEncodings(); 
string text; 
for (int a = 0; a < info.Length; ++a) 
{ 
     text = File.ReadAllText(fn, info[a].GetEncoding()); 
     File.WriteAllText(fn + a, text, info[a].GetEncoding()); 
} 

fn फ़ाइल पथ को पढ़ने के लिए है। सभी बनाई गई फ़ाइलों (जैसे 130) की जांच की है, उनमें से कोई भी सही ढंग से लिखता है, इसलिए मैं विचारों से बाहर हूं और इंटरनेट पर कुछ भी ढूंढने में असमर्थ हूं।

समाधान:

ऐसा लगता है कि अंत में इस कोड को काम किए गए पाठ ठीक से प्राप्त करने के लिए, यह भी, लेखन भाग के लिए एक ही एनकोडर ठीक करने के लिए किया था:

System.Text.Encoding encoding = System.Text.Encoding.GetEncodings()[41].GetEncoding(); 

String text = File.ReadAllText(fn, encoding); // get file text 

// DO ALL THE STUFF I HAD TO 

File.WriteAllText(fn, text, encoding) System.Text.Encoding.GetEncodings()[115].GetEncoding(); //Latin 9 (ISO) 

/* ALL THIS ENCODINGS WORKED APARENTLY FOR ME WITH ALL WEIRD CHARS I WAS ABLE TO WRITE :P 
    System.Text.Encoding.GetEncodings()[108].GetEncoding(); //Baltic (ISO) 
    System.Text.Encoding.GetEncodings()[107].GetEncoding(); //Latin 3 (ISO) 
    System.Text.Encoding.GetEncodings()[106].GetEncoding(); //Central European (ISO) 
    System.Text.Encoding.GetEncodings()[105].GetEncoding(); //Western European (ISO) 
    System.Text.Encoding.GetEncodings()[49].GetEncoding();  //Vietnamese (Windows) 
    System.Text.Encoding.GetEncodings()[45].GetEncoding();  //Turkish (Windows) 
    System.Text.Encoding.GetEncodings()[41].GetEncoding();  //Central European (Windows) <-- Used this one 
    */ 

आप अपने लिए बहुत-बहुत धन्यवाद मदद

नोमान (1)

+2

क्या एन्कोडिंग फ़ाइल में लिखा गया था? यह जानने के बिना, आपको बस अनुमान लगाना है। यह यूनिक्स मशीन पर है अप्रासंगिक है। स्वचालित अनुमान लगाने के लिए – Oded

+1

+1 !, लेकिन अब आपको पता लगाने के लिए अपने स्रोत पर वापस जाना होगा, क्योंकि ओडेड कहता है, 'फ़ाइल को कौन सी एन्कोडिंग लिखा गया था?'। सौभाग्य! खेद – shellter

+0

इम बताने के लिए है कि मैं स्रोत पता नहीं कर सकते, केवल मुझे पता है कि पर नोटपैड यूनिक्स एएनएसआई के रूप में तल पर चिह्नित है, यह एक बल्ला जो MyFile.txt [* साथ somefiles] कॉपी करता है से बनाया गया है। मैं मान उनमें से ज्यादातर ओरेकल से या एक एक्सेल स्क्रिप्ट –

उत्तर

2

आप उचित इनकोडिंग प्रारूप निकलना है।

फ़ाइल का उपयोग करें -i। यह फ़ाइल के लिए MIME- प्रकार की जानकारी आउटपुट करेगा, जिसमें वर्ण-सेट एन्कोडिंग भी शामिल होगा। मैं भी इसके लिए एक man-page पाया, :)

या कोशिश enca

यह अनुमान लगा सकते हैं और यहां तक ​​कि एन्कोडिंग के बीच कनवर्ट। बस मैन पेज पर देखें।

यदि आपके पास उचित एन्कोडिंग प्रारूप है, तो इसे अपनी फ़ाइल पढ़ने पर लागू करने का एक तरीका देखें।

उद्धरण: How to find encoding of a file in Unix via script(s)

+0

बाहर मिले समाधान है, लेकिन 6 और घंटे बीतने तक इसे पोस्ट नहीं कर सकते हैं =) –