c++, cout and UTF-8

后端 未结 4 514
萌比男神i
萌比男神i 2020-12-19 03:44

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)

相关标签:
4条回答
  • 2020-12-19 04:16

    If you want your program to use your current locale, call setlocale(LC_ALL, "") as the first thing in your program. Otherwise the program's locale is C and what it will do to non-ASCII characters is not knowable by us mere humans.

    0 讨论(0)
  • 2020-12-19 04:19

    This is really no surprise. Unless your terminal is set to UTF-8 coding, how does it know that s2 isn't supposed to be "(Latin small letter a with circumflex)(Euro sign)(Pipe)", supposing that your terminal is set to ISO-8859-1 according to http://www.ascii-code.com/

    By the way, cout is not "dying" as it clearly continues to produce output after your test string.

    0 讨论(0)
  • 2020-12-19 04:20

    The Windows console does not handle non-local-codepage characters by default.

    You'll need to make sure you have a Unicode-capable font set in the console window, and that the codepage is set to UTF-8 through a call to chcp. This is not a guaranteed success though. Note that `wcout´ changes nothing if the console can't show the fancy characters because its font is botched.

    On all modern Linux distros, the console is set to UTF-8 and this should work out of the box.

    0 讨论(0)
  • 2020-12-19 04:41

    As others have pointed out, std::cout is agnostic about this, at least in "C" locale (the default). On the other hand, your console window must be set up to display UTF-8: code page 65001. Try invoking chcp 65001 before executing your program. (This has worked for me in the past.)

    0 讨论(0)
提交回复
热议问题