मैं वर्तमान में स्ट्रिंग के संचालन के लिए std::string
और char
उपयोग करने वाले ऐप्लिकेशन की देखभाल कर रही हूँ - जो linux पर ठीक है, के बाद से लिनक्स यूनिकोड को नास्तिक है (या तो यह लगता है, मैं वास्तव में नहीं पता है, इसलिए अगर मैं यहां कहानियां कह रहा हूं तो कृपया मुझे सही करें)। यह वर्तमान शैली स्वाभाविक रूप से समारोह/वर्ग घोषणाओं के इस प्रकार की ओर जाता है:यूनिकोड पोर्टेबिलिटी
std::string doSomethingFunkyWith(const std::string& thisdata)
{
/* .... */
}
हालांकि, अगर thisdata
यूनिकोड वर्ण हैं, यह गलत तरीके से खिड़कियों पर प्रदर्शित किया जाएगा, के बाद से std::string
विंडोज पर यूनिकोड वर्ण को रोक नहीं सकते।
namespace MyApplication {
#ifdef UNICODE
typedef std::wstring string_type;
typedef wchar_t char_type;
#else
typedef std::string string_type;
typedef char char_type;
#endif
/* ... */
string_type doSomethingFunkyWith(const string_type& thisdata)
{
/* ... */
}
}
यह एक अच्छी अवधारणा खिड़कियों पर यूनिकोड का समर्थन करने के साथ जाने के लिए है:
तो मैं इस अवधारणा को सोचा है?
मेरे वर्तमान टूलचेन में लिनक्स पर जीसीसी/क्लैंग, और विंडोज़ समर्थन के लिए वाइन + मिनजीडब्ल्यू (शराब के माध्यम से भी क्रॉसस्टेस्टिंग भी होता है), यदि यह मायने रखता है।
मुझे लगता है कि यह उचित है। मेरा मानना है कि यह कई पुस्तकालयों जैसे WxWidgets द्वारा लिया गया दृष्टिकोण है। – HighCommander4
हां यह आपके द्वारा उल्लेखित कई पुस्तकालयों, विंडोज़ के लिए किया जाता है। – Marlon
अधिक सटीक, अधिकांश लिनक्स प्रोग्राम यूनिकोड को यूटीएफ -8 के रूप में संभालते हैं, जो 'std :: string' के साथ संगत है। लेकिन इसका मतलब है कि 'आकार() 'और' लंबाई() 'बाइट्स की संख्या देगा, लेकिन जरूरी नहीं कि कोड पॉइंट या ग्लाइफ की संख्या हो। तारों के साथ आप क्या कर रहे हैं इसके आधार पर, आपको अधिक जानकारी की आवश्यकता नहीं हो सकती है। – aschepler