2009-05-23 11 views
7

मेरे पास पूछने के लिए एक सरल सवाल है। मेरे पास एफएफएफई के साथ शुरू होने वाला पढ़ने के लिए एक यूटीएफ 16 टेक्स्ट फ़ाइल है। इस तरह की फाइल से निपटने के लिए सी ++ उपकरण क्या हैं? मैं बस इसे पढ़ना चाहता हूं, कुछ लाइनों को फ़िल्टर करना चाहता हूं, और परिणाम प्रदर्शित करना चाहता हूं।यूनिकोड फ़ाइलों को पढ़ें C++

यह आसान लग रहा है, लेकिन मुझे सिर्फ सादे ascci फ़ाइलों के साथ काम करने का अनुभव है और मैं जल्दी में हूं। मैं वीएस सी ++ का उपयोग कर रहा हूं, लेकिन मैं प्रबंधित सी ++ के साथ काम नहीं करना चाहता हूं।

सादर

यहाँ एक बहुत ही सरल उदाहरण

wifstream file; 
file.open("C:\\appLog.txt", ios::in); 

wchar_t buffer[2048]; 
file.seekg(2); 
file.getline(buffer, bSize-1); 

wprintf(L"%s\n", buffer); 
file.close(); 

उत्तर

2

आप fgetws है, जो 16-बिट वर्ण पढ़ता उपयोग कर सकते हैं। आपकी फ़ाइल थोड़ा-एंडियन, बाइट ऑर्डर में है। चूंकि x86 मशीनें भी छोटी-छोटी हैं, इसलिए आपको बिना किसी परेशानी के फ़ाइल को संभालने में सक्षम होना चाहिए। जब आप आउटपुट करना चाहते हैं, तो fwprintf का उपयोग करें।

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

+0

हां, आपने सब कुछ कहा, अधिक जानकारी उपयोगी हो सकती है। मैंने एमएसडीएन, जेफरी रिक्टर पुस्तक में कोशिश की, लेकिन ऐसा लगता है कि इस विषय के बारे में बात करते समय उनके पास अच्छे उदाहरण नहीं हैं। धन्यवाद – Andres

0

FFFE सिर्फ प्रारंभिक बीओएम (बाइट क्रम चिह्न) है एक निराली। बस सामान्य रूप से फ़ाइल से पढ़ें, लेकिन एक विस्तृत चार बफर में।

+0

उदाहरण कोड हमेशा एक अच्छा विचार है (यह एक सिफारिश समाधान, ज़ाहिर है, इसकी सिर्फ एक हैक है) - आप कैसे जानते हैं कि कैसे वह सामान्य रूप से एक फ़ाइल पढ़ता करते हैं? –

+0

जबकि मैं आपके साथ नील से सहमत हूं, एंड्रेस कहता है: "लेकिन मुझे सादे एसीसी फाइलों के साथ काम करने का अनुभव है।" ;) – xian

1

इसके लायक होने के लिए, मुझे लगता है कि मैंने पढ़ा है कि आपको एक Microsoft फ़ंक्शन का उपयोग करना है जो आपको एन्कोडिंग को specfiy करने की अनुमति देता है।

http://msdn.microsoft.com/en-us/library/z5hh6ee9(VS.80).aspx

+0

यह आवश्यक नहीं होना चाहिए। –

1

चूंकि आप जल्दी में हैं, बाइनरी मोड में ifstream का उपयोग करें और अपना काम करें। मुझे आपके साथ एक ही समस्या थी और यह मेरा दिन बचाया।

ifstream file; 
    file.open("k:/test.txt", ifstream::in|ifstream::binary); 

    wchar_t buffer[2048]; 
    file.seekg(2); 
    file.read((char*)buffer, line_length); 
    wprintf(L"%s\n", buffer); 
    file.close(); 
+0

निक इस जवाब ने वास्तव में मेरी मदद की। fgetws एक आकार के बफर की आवश्यकता है। –

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