मुझे साचा से सहमत होना होगा। TCHAR/ _T()/ आदि का अंतर्निहित आधार यह है कि आप "ANSI"-आधारित एप्लिकेशन लिख सकते हैं और फिर जादुई रूप से मैक्रो को परिभाषित करके यूनिकोड समर्थन दे सकते हैं। लेकिन यह कई बुरी धारणाओं पर आधारित है:
कि आप सक्रिय रूप से अपने सॉफ्टवेयर के एमबीसीएस और यूनिकोड दोनों संस्करणों का निर्माण करें
अन्यथा, आप फिसल जाएंगे और char*कई स्थानों पर साधारण तारों का उपयोग करेंगे ।
आप _T ("...") शाब्दिक भाग में गैर- ASCII बैकस्लैश एस्केप का उपयोग नहीं करते हैं
जब तक आपका "ANSI" एन्कोडिंग ISO-8859-1 नहीं होता है, तब तक परिणाम char*और wchar_t*शाब्दिक समान वर्णों का प्रतिनिधित्व नहीं करेंगे।
उस UTF-16 स्ट्रिंग्स का उपयोग "ANSI" स्ट्रिंग्स की तरह ही किया जाता है
वे नहीं हैं। यूनिकोड कई अवधारणाओं का परिचय देता है जो अधिकांश विरासत चरित्र एनकोडिंग में मौजूद नहीं हैं। सरोगेट्स। पात्रों का मेल। सामान्यीकरण। सशर्त और भाषा-संवेदनशील आवरण नियम।
और शायद सबसे महत्वपूर्ण बात यह है कि UTF-16 को डिस्क पर शायद ही कभी सहेजा जाता है या इंटरनेट पर भेजा जाता है: UTF-8 को बाहरी प्रतिनिधित्व के लिए प्राथमिकता दी जाती है।
कि आपका एप्लिकेशन इंटरनेट का उपयोग नहीं करता है
(अब, यह आपके लिए एक मान्य धारणा हो सकती है सॉफ़्टवेयर के , लेकिन ...)
वेब UTF-8 और दुर्लभ एन्कोडिंग के ढेरों पर चलता है । TCHARअवधारणा केवल दो को पहचानता है: "एएनएसआई" (जो नहीं कर सकते UTF-8 होना ) और "यूनिकोड" (UTF-16)। यह आपके विंडोज एपीआई कॉल यूनिकोड-जागरूक बनाने के लिए उपयोगी हो सकता है, लेकिन यह आपके वेब और ई-मेल एप्स यूनिकोड-जागरूक बनाने के लिए बेकार है।
आप गैर-Microsoft पुस्तकालयों का उपयोग करते हैं
कोई और उपयोग नहीं करता TCHAR। पोको का उपयोग करता है std::stringऔर UTF-8। SQLite में इसके API के UTF-8 और UTF-16 संस्करण हैं, लेकिन नहीं TCHAR। TCHARमानक पुस्तकालय में भी नहीं है, इसलिए नहींstd::tcout जब तक आप स्वयं इसे परिभाषित नहीं करना चाहते।
मैं TCHAR के बजाय क्या सलाह देता हूं
भूल जाते हैं कि "एएनएसआई" एन्कोडिंग मौजूद है, सिवाय इसके कि जब आपको एक फाइल पढ़ने की आवश्यकता हो जो मान्य UTF-8 नहीं है। भूल TCHARभी जाओ । हमेशा Windows API फ़ंक्शन के "W" संस्करण को कॉल करें। #define _UNICODEबस यह सुनिश्चित करने के लिए कि आप गलती से "ए" फ़ंक्शन नहीं कहते हैं।
हमेशा स्ट्रिंग्स के लिए UTF एनकोडिंग का उपयोग करें: स्ट्रिंग्स के लिए UTF-8 charऔर स्ट्रिंग्स के लिए UTF-16 (Windows पर) या UTF-32 (यूनिक्स जैसी प्रणालियों पर) wchar_t। typedef UTF16और UTF32मंच के मतभेदों से बचने के लिए चरित्र प्रकार।