Ho il seguente pezzo di codice:strano comportamento di std :: string con unicode
#include <iostream>
std::string eps("ε");
int main()
{
std::cout << eps << '\n';
return 0;
}
In qualche modo si compila con g ++ e clangore su Ubuntu, e anche ne emette personaggio giusto ε
. Inoltre ho quasi lo stesso pezzo di codice che legge felicemente ε
con cin
in std::string
. A proposito, eps.size()
è 2.
La mia domanda è: come funziona? Come possiamo inserire il carattere unicode in std::string
? La mia ipotesi è che il sistema operativo gestisca tutto questo con unicode, ma non ne sono sicuro.
EDIT
Come con uscita, ho capito che è terminale che è responsabile per mostrare me giusto carattere (ε in questo caso).
Ma con l'input: cin legge i simboli su ' '
o qualsiasi altro carattere di spazio (e come ho capito byte per byte). Quindi, se prendo Ƞ
, quale secondo byte è 32 ' '
leggerà solo il primo byte, quindi si fermerà. Ma legge Ƞ
. Come?
Forse l'editor che si sta utilizzando salva il file con codifica UTF-8. –
Sì, ma non capisco come 'std :: cout' restituisca un simbolo anziché due - primo e secondo byte di ε. Per quanto ne so, 'std :: cout' funziona con codifiche a un byte. – justanothercoder
std :: cout invia semplicemente uno stream al terminale. Se il tuo terminale gestisce UTF-8, questo dovrebbe funzionare correttamente. – MrEricSir