https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80041
Bug ID: 80041
Summary: std::codecvt_utf16<wchar_t> converts to UTF-8 not
UTF-16
Product: gcc
Version: 6.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
#include <codecvt>
#include <iostream>
#include <iomanip>
int main()
{
std::codecvt_utf16<wchar_t> conv;
wchar_t wc = 0x6557;
char bytes[4] = {0};
const wchar_t* wnext = nullptr;
std::mbstate_t st{};
char* next = nullptr;
auto r = conv.out(st, &wc, &wc+ 1, wnext, bytes, std::end(bytes), next);
if (r == std::codecvt_base::ok)
for (int i = 0; bytes[i]; ++i)
std::cout << std::hex << (int)(unsigned char)(bytes[i]) << ' ';
std::cout << '\n';
}
This prints:
e6 95 97
Which is the UTF-8 encoding for U+6557.
It should print:
65 57