Неполный символ UTF8 для потока STD, пропитанного UTF8 - PullRequest
0 голосов
/ 03 сентября 2018

Я недавно получил странный отчет об ошибке .

Проблема в том, что на некоторых машинах следующее выдает неполный символ UTF8:

#include <iostream>
#include <sstream>

int main() {
        std::cout.imbue(std::locale("fr_FR.UTF-8"));
        std::cout << 1337;
}

Вывод этого на моей машине "1 337" или в шестнадцатеричном виде (через hexdump) "2031 3333 0037". Но на машине человека с ошибкой выводится шестнадцатеричный код "e231 3333 0037".

"e2" - это начало нулевой ширины без соединения , что в * UTF-8 e2 80 af.

Как это возможно? Насколько я понимаю, специальный символ - лучший разделитель чисел, чем обычный пробел, но почему C ++ (?) Не может полностью распечатать это?

Шестнадцатеричный вывод был получен ./a.out | hexdump, поэтому кодировка консоли не должна иметь значения.

...