Я недавно получил странный отчет об ошибке .
Проблема в том, что на некоторых машинах следующее выдает неполный символ 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
, поэтому кодировка консоли не должна иметь значения.