का उपयोग कर printf और खिड़कियों सांत्वना के तहत std :: ostream के बीच अलग है मैं एक प्रोग्राम है जो कंसोल के लिए UTF-8 स्ट्रिंग प्रिंट:क्या UTF-8 उत्पादन
#include <stdio.h>
int main()
{
printf("Мир Peace Ειρήνη\n");
return 0;
}
मैं कंसोल कॉन्फ़िगर सच उपयोग करने के लिए फोंट (ल्युसिडा कंसोल) टाइप करें, UTF-8 कोड-पेज (chcp 65001) को परिभाषित दोनों MinGW जीसीसी और विजुअल स्टूडियो 2010 यह पूरी तरह से काम करता है के साथ इस कार्यक्रम संकलन, मैं देख रहा हूँ: उत्पादन:
Мир Peace Ειρήνη
मैं भी ऐसा ही std::cout
#include <iostream>
int main()
{
std::cout << "Мир Peace Ειρήνη\n" ;
return 0;
}
यह मिनीजीडब्ल्यू जीसीसी का उपयोग करते हुए उपर्युक्त रूप से ठीक काम करता है लेकिन विजुअल स्टूडियो 2010 के साथ मुझे वर्ग मिलते हैं, वर्गों से अधिक (प्रत्येक गैर-ASCII पत्र प्रति दो)।
यदि मैं रीडायरेक्शन test >test.txt
के साथ प्रोग्राम चलाता हूं तो मुझे फ़ाइल में सही यूटीएफ -8 आउटपुट मिलता है।
दोनों परीक्षण विंडोज पर किया 7.
सवाल:
- उत्पादन धारा की हैंडलिंग में दृश्य स्टूडियो मानक पुस्तकालय में printf और std :: अदालत में क्या अंतर है - स्पष्ट रूप से उनमें से एक काम करता है और अन्य नहीं करता है?
- यह कैसे तय किया जा सकता है?
रियल उत्तर:
संक्षेप में: आप खराब कर रहे - std::cout
वास्तव में MSVC + UTF-8 के साथ काम नहीं करता है - या कम से कम वह उचित रूप से व्यवहार करते हैं बनाने के लिए भारी प्रयास की आवश्यकता है।
लंबे समय में: उत्तर में संदर्भित दो लेख पढ़ें।
यह आपके स्रोत कोड में सीधे यूनिकोड एम्बेड करने के लिए सुरक्षित नहीं है AFAIK। मेरा मानना है कि सबसे सुरक्षित तरीका किसी प्रकार के संसाधन का उपयोग करना है या यूनिकोड कोड बिंदुओं को इनपुट करने के लिए \ u और u8 literal (C++ 11) –
printf() है जो यूनिकोड और std :: cout आउटपुट करता है [ सी ++ में यूनिकोड समस्याएं लेकिन सी नहीं) (http://stackoverflow.com/questions/21370710) – Salvador