2010-03-11 16 views
6

में एक फ़ाइल को लिखना मुझे अपने सी प्रोग्राम के अंदर यूनिकोड में फ़ाइल में कुछ समस्याएं लिख रही हैं। मैं एक फ़ाइल में एक यूनिकोड जापानी स्ट्रिंग लिखने की कोशिश कर रहा हूं। जब मैं फ़ाइल को चेक करने के लिए जाता हूं हालांकि यह खाली है। यदि मैं एक गैर-यूनिकोड स्ट्रिंग का प्रयास करता हूं तो यह ठीक काम करता है। मैं क्या गलत कर रहा हूं?यूनिकोड

setlocale(LC_CTYPE, ""); 
FILE* f; 
f = _wfopen(COMMON_FILE_PATH,L"w"); 
fwprintf(f,L"日本語"); 
fclose(f); 

हे प्रणाली के बारे में: मैं Windows चला रहा हूँ। और मेरा आईडीई विजुअल स्टूडियो 2008 है।

+0

मैं, एक टिप्पणी के बजाय एक जवाब के रूप में इस पोस्टिंग कर रहा हूँ क्योंकि मैं सी के बारे में सेम पता नहीं है, लेकिन मुझे आश्चर्य है अगर अपने स्रोत कोड को UTF-8 में है, और संकलक सोचता है कि यह ASCII है । –

+0

नहीं, मुझे नहीं लगता कि यह मामला है। कंपाइलर जानता है कि यह यूटीएफ -8 है, मैंने इसे सुनिश्चित किया है: पी – Lefteris

+0

ठीक है। वैसे भी यह एक शॉट के लायक था। :-) –

उत्तर

8

आपको मोड में एन्कोडिंग जोड़ने की आवश्यकता हो सकती है। संभवत: यह:

f = _wfopen(COMMON_FILE_PATH,L"w, ccs=UTF-16LE"); 
+0

धन्यवाद .. यह काम करता है। लेकिन यह एक अतिरिक्त सवाल बनाता है। मैं वास्तव में चाहता था ऐसा इसलिए है कि मैं आम तौर पर फाइलों में यूनिकोड लिखने में सक्षम हो सकता हूं। जापानी सिर्फ एक उदाहरण था। यह सभी यूनिकोड समर्थित भाषाओं के लिए काम करेगा, सही? – Lefteris

+0

सही। यह भाषा निर्भर नहीं होना चाहिए। –

0

fopen() के साथ ऐसा करने के लिए यहां मेरे लिए काम करता है। मैं मैक ओएस एक्स का उपयोग कर रहा हूं, इसलिए मेरे पास _wfopen() नहीं है; मानते हैं कि _wfopen() आपको खराब सामान नहीं लौटा रहा है, तो आपके कोड को काम करना चाहिए।

संपादित करें: मैंने साइगविन पर भी परीक्षण किया - यह भी ठीक काम करता प्रतीत होता है।

+0

मेरे लिए काम नहीं किया :(, _wfopen एक सामान्य फ़ाइल * सूचक देता है। मैं विंडोज चला रहा हूं। और मेरा आईडीई विजुअल स्टूडियो 2008 है। – Lefteris

0

मुझे अपने किसी भी बॉक्स पर _wfopen का संदर्भ नहीं मिल रहा है, हालांकि मुझे नहीं लगता कि इसे फॉपेन के साथ क्यों खोलना एक समस्या का कारण बनना चाहिए, आपको केवल एक फ़ाइल सूचक चाहिए।

क्या मायने रखता है कि सी आंतरिक यूनिकोड के मानों को पहचानता है और उन बाइनरी मानों को फ़ाइल में ठीक से धक्का देता है।

कार्ल के सुझाव के रूप में केवल फॉपेन का उपयोग करने का प्रयास करें, इसे ठीक से काम करना चाहिए।

संपादित करें: यदि यह अभी भी काम नहीं करता है तो आप वर्णों को उनके पूर्णांक मानों के रूप में परिभाषित करने और fwprintf() के साथ उन्हें धक्का देने का प्रयास कर सकते हैं, मुझे पता है कि यह बोझिल है और लंबे समय तक एक अच्छा फिक्स नहीं है, लेकिन इसे काम करना चाहिए कुंआ।