Mam następujący fragment kodu:Dziwne zachowanie std :: string z unicode
#include <iostream>
std::string eps("ε");
int main()
{
std::cout << eps << '\n';
return 0;
}
Jakoś kompiluje z g ++ i brzękiem na Ubuntu, a nawet drukuje się prawy charakter ε
. Mam również prawie ten sam kawałek kodu, który szczęśliwie czyta ε
z cin
w . Przy okazji, eps.size()
jest 2.
Moje pytanie brzmi - jak to działa? Jak wstawić znak Unicode do std::string
? Domyślam się, że system operacyjny obsługuje całą tę pracę z unikodem, ale nie jestem pewien.
EDIT
Jak z wyjściem, zrozumiałem, że jest to końcówka, która jest odpowiedzialna za pokazanie mi prosto charakter (e w tym przypadku).
Ale z wejściem: cin czyta symbole do ' '
lub dowolnej innej spacji (i jak rozumiem bajt po bajcie). Tak więc, jeśli wezmę Ƞ
, który drugi bajt jest 32 ' '
będzie czytał tylko pierwszy bajt, a następnie zatrzyma się. Ale czyta się: Ƞ
. W jaki sposób?
Może redaktor używasz zapisuje plik z kodowaniem UTF-8. –
Tak, ale nie rozumiem, w jaki sposób 'std :: cout' wypisuje jeden symbol zamiast dwóch - pierwszy i drugi bajt ε. O ile mi wiadomo, 'std :: cout' działa z kodowaniem jednobajtowym. – justanothercoder
std :: cout właśnie wysyła strumień do terminala. Jeśli twój terminal obsługuje UTF-8, powinno to działać poprawnie. – MrEricSir