2015-05-12 14 views
5

Il problema è che sto cercando di stampare alcuni caratteri all'esterno dell'ASCII come i caratteri di umlaut tedeschi, il 'ß' e simili. Questi caratteri non rientrano nella normale variabile char, quindi ovviamente ho provato a inserirli in un wchar_t e ho inizializzato la stringa con un ".....". Ma ogni volta che questa stringa contiene un carattere dall'alto, ottengo l'errore citato, ma va bene con tutti gli altri caratteri dell'ASCII. Questo succede anche con u "....", U "......" e se uso u8 "....." non genera l'errore ma stampa spazzatura.Errore C++: conversione all'esecuzione Set di caratteri

Quindi, per le domande:

  1. Come posso stampare questa personaggi e altri personaggi al di fuori del set ASCII?
  2. Qual è questo errore comunque, cosa vuol dire?
  3. L'unico modo per stampare i caratteri era con una chiamata a setlocale() per impostare le impostazioni internazionali per l'ambiente predefinito (tedesco) e quindi semplicemente creando una matrice normale con questi caratteri in essa non genera errori e stampa correttamente, il problema qui è PERCHÉ !!? Non capisco perché funziona così, dato che la dimensione del tipo di carattere non viene modificata, quindi non presumo che questa chiamata a setlocale() cambi la mappatura dei caratteri nel set di caratteri predefinito (ASCII normalmente) .
  4. Se qualcuno può dare qualche spiegazione in più sui set di caratteri del soggetto e su come gestirli in C++ e C, allora lo apprezzerei molto specialmente con UTF-8, 16, 32 (non devi scrivi tu stesso anche alcuni altri siti web ben organizzati e relativamente facili da capire che affrontano l'argomento in modo più approfondito sono molto ben accolti).

Esempio come richiesto:

#include <iostream> 
#include <string> 

using namespace std; 

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

    wcout << x ; 

    return 0 ; 
} 

Viene stampata l'errore.

#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 ; 
} 

Questo funziona correttamente. Ma anche dopo aver cambiato la locale se faccio il primo codice, viene generato l'errore.

Nota: ho notato in C++ (non C) che anche senza includere alcun file oltre a iostream che tutto il contenuto di altri file come stringa o locale o qualsiasi altra cosa dalla libreria standard è dichiarato e nello spazio dei nomi std. L'ho ignorato per un po 'e includo ancora i file per la documentazione, ma perché sta succedendo questo. (Sto usando tdm-gcc 64 bit)

+2

È possibile creare un [Esempio minimo, completo e verificabile] (http://stackoverflow.com/help/mcve) per illustrare il problema e includere errori di compilazione o output effettivo e previsto. –

+0

ok, lo farò. – Lockon2000

+0

Ho incluso gli esempi. – Lockon2000

risposta

2

Ho affrontato questo problema anche durante la compilazione di progetti multipiattaforma inizialmente modificati in Visual Studio. VS utilizza un set di caratteri diversi (CP1252, almeno nel mio caso), mentre GCC si aspetta UTF-8. È possibile utilizzare il flag -finput-charset g ++ per indicare la codifica del codice sorgente.

Problemi correlati