gcc wstring_convert 中的错误?

Bug in gcc wstring_convert?

我使用 MinGW 8.1.0 64 位。此代码段:

#include <clocale>
#if __has_include(<codecvt>)
#include <codecvt>
#endif
#include <cstdlib>
#include <locale>
#include <string>
#include <wchar.h>
#include <iostream>

int main() {
    auto utf8_decode = [](const std::string &str) -> std::wstring {
      std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
      return myconv.from_bytes(str);
    };

    std::string test = "=";
    auto s = utf8_decode(test);

    std::wcout << s << std::endl;

    return 0;
}

在 Windows 上输出象形文字(或一些乱码),但在 Linux 上输出 =(如预期)。 这是标准库中的错误还是我遗漏了什么?

看起来确实是这样a bug in MinGW libstdc++.dll; codecvt 错误地选择了大端,所以 = (0x3d) 变成了 (0x3d00).

建议的解决方法 - 使用 codecvt_utf8<wchar_t, 0x10ffff, std::little_endian>

手动强制小端