Hopefully a simple question: cout
seems to die when handling strings that end with a multibyte UTF-8 char, am I doing something wrong? This is with GCC (Mingw) on Win7 x64.
**Edit Sorry if I wasn't clear enough, I'm not concerned about the missing glyphs or how the bytes are interpreted, merely that they are not showing at all right after the call to cout << s4
(missing BAR). Any further cout
s after the first display no text whatsoever!
#include <cstdio>
#include <iostream>
#include <string>
int main() {
std::string s1("abc");
std::string s2("…"); // … = 0xE2 80 A6
std::string s3("…abc");
std::string s4("abc…");
//In C
fwrite(s1.c_str(), s1.size(), 1, stdout);
printf(" FOO ");
fwrite(s2.c_str(), s2.size(), 1, stdout);
printf(" BAR ");
fwrite(s3.c_str(), s3.size(), 1, stdout);
printf(" FOO ");
fwrite(s4.c_str(), s4.size(), 1, stdout);
printf(" BAR\n\n");
//C++
std::cout << s1 << " FOO " << s2 << " BAR " << s3 << " FOO " << s4 << " BAR ";
}
// results:
// abc FOO ��� BAR ���abc FOO abc… BAR
// abc FOO ��� BAR ���abc FOO abc…
WriteConsoleW
works reasonably well given correct fonts. Windows doesn't like UTF-8, though, which means thatWriteConsoleA
is going to choke here. – Excavation