मुझे साचा से सहमत होना होगा। 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
मंच के मतभेदों से बचने के लिए चरित्र प्रकार।