c++ - Storing unicode UTF-8 string in std::string -


में चर्चा के जवाब में

मैं एक UTF-8 स्ट्रिंग को std :: string चर Visual Studio 2010 पर्यावरण

असाइन करने का प्रयास कर रहा / रही हूं

std :: string msg = "निमंत्रण">

हालांकि, जब मैं स्ट्रिंग दृश्य डीबगर को देखता हूं, I केवल देखो "?????" मेरे पास फाइल यूनिकोड (हस्ताक्षर के साथ यूटीएफ -8) के रूप में सहेजी गई है और मैं वर्ण सेट "यूनिकोड वर्ण सेट का उपयोग कर रहा हूँ"

"" "एक नेपाली भाषा है और इसमें 5 अक्षर हैं और इसमें 15 बाइट्स होंगे। लेकिन दृश्य स्टूडियो डिबगर msg का आकार 5 के रूप में दिखाता है

मेरा प्रश्न यह है:

मैं इसे उपयोग करने के लिए बस यूटीएफ -8 को स्टोर करने के लिए std :: string का उपयोग कैसे करूं

यदि आप सी +11 11 का प्रयोग कर रहे थे तो यह आसान होगा:

  std :: string msg = u8 "मूवमेंट्स";   

लेकिन जब से आप नहीं हैं, तो आप एस्केप अनुक्रम का उपयोग कर सकते हैं और आपके लिए एन्कोडिंग प्रबंधित करने के लिए स्रोत फ़ाइल के वर्णसेट पर भरोसा नहीं कर सकते, इस तरह आपका कोड अधिक पोर्टेबल है (अगर आप गलती से सहेजते हैं इसे गैर-यूटीएफ 8 प्रारूप में):

  std :: string msg = "\ xE0 \ xA4 \ xAE \ xE0 \ xA4 \ xB9 \ xE0 \ xA4 \ xB8 \ xE0 \ xA5 \ x81" \ xE0 \ xA4 \ xB8 "; अन्यथा, आप इसके बजाय रनटाइम पर एक रूपांतरण करने पर विचार कर सकते हैं:  
   

कोड> std :: string toUtf8 (const std :: wstring और str) {std :: string ret; Int len ​​= वाइड-चेरटोमल्टीबाइट (सीपी_यूटीएफ 8, 0, स्ट्रै। सी।) (Str.Length (), शून्य, 0, शून्य, शून्य); अगर (लैन & gt; 0) {ret.resize (लेन); वाइड-चाइरटोमल्टीबाइट (सीपी_यूटीएफ 8, 0, स्ट्रॉस सीस्ट्रैक्ट), स्ट्रैथ (), एंड रिट [0], लेन, नाउल, नल); } वापसी रिटर्न; }

  std :: string msg = toUtf8 (एल "मूवमेंट"););;    

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -