У меня есть следующий фрагмент кода:Странное поведение станд :: строка с юникодом
#include <iostream>
std::string eps("ε");
int main()
{
std::cout << eps << '\n';
return 0;
}
Как-то компилирует с г ++ и лязгом на Ubuntu, и даже печатает правильный характер ε
. Также у меня есть почти такой же фрагмент кода, который с радостью читает ε
с cin
в std::string
. Кстати, eps.size()
- 2.
Мой вопрос - как это работает? Как мы можем вставить символ Unicode в std::string
? Я предполагаю, что операционная система обрабатывает всю эту работу с помощью unicode, но я не уверен.
EDIT
Как выход, я понял, что это терминал, который отвечает за показ мне правильный символ (е в данном случае).
Но с вводом: cin читает символы до ' '
или любого другого символа пробела (и, как я понимаю, byte by byte). Итак, если я беру Ƞ
, второй байт 32 ' '
будет читать только первый байт, а затем остановиться. Но он читает Ƞ
. Как?
Возможно редактор вы используете сохраняет файл с UTF-8 кодировке. –
Да, но я не понимаю, как 'std :: cout' выводит один символ вместо двух - первый и второй байты ε. Насколько я знаю, 'std :: cout' работает с однобайтовыми кодировками. – justanothercoder
std :: cout просто отправляет поток на терминал. Если ваш терминал обрабатывает UTF-8, это должно работать нормально. – MrEricSir