2015-05-12 9 views
5

समस्या यह है कि मैं एएससीआईआई के बाहर कुछ पात्रों को जर्मन उमलॉट पात्रों, 'ß' और इसी तरह प्रिंट करने की कोशिश कर रहा हूं। ये वर्ण सामान्य चार चर में फिट नहीं होते हैं, इसलिए स्पष्ट रूप से मैंने उन्हें wchar_t में रखने की कोशिश की और स्ट्रिंग को एल "....." के साथ प्रारंभ किया। लेकिन हर बार जब इस स्ट्रिंग में ऊपर से एक वर्ण होता है, तो मुझे उल्लिखित त्रुटि मिलती है, लेकिन यह ASCII के सभी अन्य पात्रों के साथ ठीक है। यह आपके "....", यू "......" के साथ भी होता है और यदि मैं u8 "....." का उपयोग करता हूं तो यह त्रुटि उत्पन्न नहीं करता है लेकिन कचरा प्रिंट करता है।सी ++ त्रुटि: निष्पादन में रूपांतरण कैरेक्टर सेट

सवाल तो:

  1. मैं कैसे ASCII सेट के बाहर से इस वर्ण और अन्य पात्रों मुद्रित कर सकते हैं?
  2. वैसे भी यह त्रुटि क्या है, इसका क्या अर्थ है?
  3. एकमात्र तरीका जिसे मैं अक्षरों को मुद्रित कर सकता था, को लोकल को पर्यावरण डिफ़ॉल्ट (जर्मन) में सेट करने के लिए सेटलोकेल() पर कॉल करके और फिर इस वर्ण के साथ सामान्य सरणी बनाकर इसमें कोई त्रुटि उत्पन्न नहीं होगी और प्रिंट नहीं होगा ठीक है, यहाँ समस्या क्यों है !! मुझे पूरी तरह से यह नहीं मिलता है कि यह अब क्यों काम करता है, क्योंकि चार प्रकार का आकार बदला नहीं जाता है, इसलिए मुझे यह कॉल सेटलोकेल() को डिफ़ॉल्ट वर्ण सेट (ASCII सामान्य रूप से) में वर्णों के मैपिंग को नहीं बदलता है। ।
  4. यदि कोई व्यक्ति विषय चरित्र सेट पर थोड़ा और स्पष्टीकरण दे सकता है और सी ++ और सी में उन्हें कैसे संभाला जाए, तो मैं इसकी सराहना करता हूं विशेष रूप से यूटीएफ -8, 16, 32 के साथ (आपको इसकी आवश्यकता नहीं है इसे स्वयं को कुछ अन्य अच्छी तरह व्यवस्थित और अपेक्षाकृत आसान वेबसाइटों को समझने में आसान है जो इस विषय से निपटने के लिए बहुत अच्छी तरह से स्वागत करते हैं)।

उदाहरण के रूप में अनुरोध:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    wstring x = L"öäüß" ; 

    wcout << x ; 

    return 0 ; 
} 

यह त्रुटि प्रिंट करता है।

#include <iostream> 
#include <string> 
#include <locale> 

using namespace std; 

int main(void) 
{ 

    setlocale(LC_ALL,""); // sets locale to german on my computer 
    string x = "äöüß" ; 

    cout << x ; 

    return 0 ; 
} 

यह ठीक से काम करता है। लेकिन अगर मैं पहला कोड बना देता हूं तो लोकेल को बदलने के बाद भी त्रुटि उत्पन्न होती है।

नोट: मैंने सी ++ (सी नहीं) में देखा है कि आईओस्ट्रीम की तुलना में किसी भी फाइल को शामिल किए बिना भी कि स्ट्रिंग या लोकेल जैसी अन्य फाइलों की सभी सामग्री या मानक लाइब्रेरी से कुछ और घोषित किया गया है और std namespace में। मैंने थोड़ी देर के लिए इसे अनदेखा किया और अभी भी दस्तावेज़ीकरण के लिए फाइलें शामिल हैं लेकिन यह क्यों हो रहा है। (मैं टीडीएम-जीसीसी 64 बिट का उपयोग कर रहा हूं)

+2

आप अपनी समस्या का वर्णन करने के लिए एक [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve) बनाना चाहते हैं, और बिल्ड त्रुटियों, या वास्तविक और अपेक्षित आउटपुट शामिल करना चाहते हैं। –

+0

ठीक है, मैं यह करूँगा। – Lockon2000

+0

मैंने उदाहरणों को शामिल किया। – Lockon2000

उत्तर

2

विजुअल स्टूडियो में शुरू में बहु-प्लेटफार्म परियोजनाओं को संकलित करते समय मुझे भी इस समस्या का सामना करना पड़ा। वीएस एक अलग चरित्र सेट (सीपी 1252, कम से कम मेरे मामले में) का उपयोग करता है, जबकि जीसीसी यूटीएफ -8 की अपेक्षा करता है। आप अपने स्रोत कोड के एन्कोडिंग को इंगित करने के लिए -finput-charset g ++ ध्वज का उपयोग कर सकते हैं।

संबंधित मुद्दे