दिलचस्प पोस्ट
पेजिंग के साथ UICollectionView – सेटिंग पृष्ठ चौड़ाई बाइंड क्लास विंडो स्क्रॉल ईवेंट में टॉगल करें टीएफएस में फाइल / निर्देशिकाओं को कैसे नजरअंदाज कर उन्हें केंद्रीय स्रोत भंडार में जाने से बचने के लिए? कक्षा को सशर्त रूप से लागू करने का सबसे अच्छा तरीका क्या है? एसएफ़टीपी लाइब्रेरीज़ .नेट के लिए मैं 2 अंकों के प्रारूप में महीने और जावास्क्रिप्ट की तारीख कैसे प्राप्त करूं? यह सीटीआईपी कोड पायथन 3.3 के साथ काम क्यों नहीं करेगा, लेकिन पायथन 2.7 के साथ काम करेगा? Javascript फ़ंक्शन का उपयोग करके इनपुट का मूल्य सेट करें AppDelegate.m में स्क्रीन पर वर्तमान प्रदर्शित UIViewController प्राप्त करें जावास्क्रिप्ट से टीसीपी सॉकेट्स पर मैं कैसे संपर्क कर सकता हूं? क्या यह जांचने का कोई तरीका है कि वेब पेज पर कौन से सीएसएस शैलियों का इस्तेमाल किया जा रहा है या नहीं? डेटाएनेटेशन रेंज विशेषता पर क्लाइंट साइड सत्यापन यात्राएं iPhone – UIWebview – लिंक का URL क्लिक किया गया टंकिनर अजगर 3 में विभिन्न वर्गों से चर तक कैसे पहुंचें वास्तविक समय पिच का पता लगाने

यूनिकोड UTF-8 फ़ाइल को wstring में पढ़ें

मैं विंडोज प्लेटफॉर्म पर एक यूनिकोड (यूटीएफ -8) फ़ाइल को wstring (ओं) में कैसे पढ़ सकता / सकती हूं?

Solutions Collecting From Web of "यूनिकोड UTF-8 फ़ाइल को wstring में पढ़ें"

सी ++ 11 समर्थन के साथ, आप std :: codecvt_utf8 facet का उपयोग कर सकते हैं जो कि यूटीएफ -8 एन्कोडेड बाइट स्ट्रिंग और यूसीएस 2 या यूसीएस 4 वर्ण स्ट्रिंग के बीच रूपांतरण को प्रयुक्त करता है और जिसका इस्तेमाल यूटीएफ -8 फाइलों को पढ़ने और लिखने के लिए किया जा सकता है, दोनों पाठ और बाइनरी ।

पहलू का उपयोग करने के लिए आप आम तौर पर लोकेल ऑब्जेक्ट बनाते हैं जो सांस्कृतिक विशिष्ट जानकारी को उन पहलुओं के एक समूह के रूप में समेटते हैं जो सामूहिक रूप से एक विशिष्ट स्थानीय वातावरण को परिभाषित करते हैं आपके पास एक लोकेल ऑब्जेक्ट हो जाने के बाद, आप अपने स्ट्रीम बफर को इसके साथ लागू कर सकते हैं:

 #include <sstream> #include <fstream> #include <codecvt> std::wstring readFile(const char* filename) { std::wifstream wif(filename); wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); std::wstringstream wss; wss << wif.rdbuf(); return wss.str(); } 

जो इस तरह से इस्तेमाल किया जा सकता है:

 std::wstring wstr = readFile("a.txt"); 

वैकल्पिक रूप से आप वैश्विक सी ++ लोकेल सेट कर सकते हैं इससे पहले कि आप स्ट्रिंग स्ट्रिम्स के साथ काम करें जो कि भविष्य के सभी कॉल को std::locale डिफ़ॉल्ट कन्स्ट्रक्टर को वैश्विक C ++ लोकेल की प्रतिलिपि वापस करने का कारण बनता है (आपको इसके साथ स्ट्रीम बफ़र्स को स्पष्ट रूप से लागू करने की आवश्यकता नहीं है ):

 std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); 

@ हंस पैसेंट द्वारा एक टिप्पणी के अनुसार, सबसे आसान तरीका है _wfopen_s का उपयोग करना मोड rt, ccs=UTF-8 साथ फ़ाइल खोलें

यहां एक और शुद्ध सी ++ समाधान है जो कम से कम वीसी ++ 2010 के साथ काम करता है:

 #include <locale> #include <codecvt> #include <string> #include <fstream> #include <cstdlib> int main() { const std::locale empty_locale = std::locale::empty(); typedef std::codecvt_utf8<wchar_t> converter_type; const converter_type* converter = new converter_type; const std::locale utf8_locale = std::locale(empty_locale, converter); std::wifstream stream(L"test.txt"); stream.imbue(utf8_locale); std::wstring line; std::getline(stream, line); std::system("pause"); } 

locale::empty() (यहां locale::global() भी काम कर सकता है) और basic_ifstream निर्माता के wchar_t* अधिभार, यह बहुत मानक-अनुरूप भी होना चाहिए (जहां "मानक" का अर्थ C ++ 0x, बेशक)।

यहां केवल विंडोज के लिए प्लेटफॉर्म-विशिष्ट फ़ंक्शन है:

 size_t GetSizeOfFile(const std::wstring& path) { struct _stat fileinfo; _wstat(path.c_str(), &fileinfo); return fileinfo.st_size; } std::wstring LoadUtf8FileToString(const std::wstring& filename) { std::wstring buffer; // stores file contents FILE* f = _wfopen(filename.c_str(), L"rtS, ccs=UTF-8"); // Failed to open file if (f == NULL) { // ...handle some error... return buffer; } size_t filesize = GetSizeOfFile(filename); // Read entire file contents in to memory if (filesize > 0) { buffer.resize(filesize); size_t wchars_read = fread(&(buffer.front()), sizeof(wchar_t), filesize, f); buffer.resize(wchars_read); buffer.shrink_to_fit(); } fclose(f); return buffer; } 

ऐसा प्रयोग करें:

 std::wstring mytext = LoadUtf8FileToString(L"C:\\MyUtf8File.txt"); 

नोट करें कि संपूर्ण फ़ाइल मेमोरी में लोड की गई है, इसलिए आप इसे बहुत बड़ी फ़ाइलों के लिए उपयोग नहीं करना चाहेंगे

इस प्रश्न को सी ++ के स्टडी :: विस्ट्रिंग, यूटीएफ -16, यूटीएफ -8 के बारे में भ्रमित किया गया था और विंडो जीयूआई में स्ट्रिंग प्रदर्शित किया गया था । राशि में, wstring UCS-2 मानक पर आधारित है, जो यूटीएफ -16 के पूर्ववर्ती है। यह एक कड़ाई से दो बाइट मानक है। मेरा मानना ​​है कि यह अरबी को कवर करता है

 #include <iostream> #include <fstream> #include <string> #include <locale> #include <cstdlib> int main() { std::wifstream wif("filename.txt"); wif.imbue(std::locale("zh_CN.UTF-8")); std::wcout.imbue(std::locale("zh_CN.UTF-8")); std::wcout << wif.rdbuf(); } 

यह थोड़ा कच्चा है, लेकिन फ़ाइल को सादे पुराने बाइट के रूप में पढ़ने के बारे में, फिर बाइट बफर को wchar_t * पर डालें?

कुछ इस तरह:

 #include <iostream> #include <fstream> std::wstring ReadFileIntoWstring(const std::wstring& filepath) { std::wstring wstr; std::ifstream file (filepath.c_str(), std::ios::in|std::ios::binary|std::ios::ate); size_t size = (size_t)file.tellg(); file.seekg (0, std::ios::beg); char* buffer = new char [size]; file.read (buffer, size); wstr = (wchar_t*)buffer; file.close(); delete[] buffer; return wstr; }