0

以下代码在 MSVC 中编译时会生成一个单字节文件,但在 GCC 8.3 中编译时会生成一个空文件。

std::wofstream out("tmpUTF16BrokenBOMFile.txt", std::ios_base::binary);
const wchar_t c = 0xFE;
// Both methods dont work:
// out.write(&c, 1);
out << c;
out.flush();
out.close();
std::cout << strerror(errno) << std::endl; // results with "Invalid or incomplete multibyte or wide character" on GCC

有没有任何可靠的方法可以将 wchar_t 输出到二进制流中,而不必担心 codecvt 会突然启动并破坏一切?我的意思是我正在使用二进制模式,因为我在这里不需要 codecvt。

我知道将 ofstream 用于二进制输出会更好,但不幸的是 wofstream 的使用是我无法更改的 API 的一部分(尽管我认为这是一个非常愚蠢的想法,至少因为 wchar_t 的大小不是由标准定义的)。

更新:如果我将它灌输到流中,看起来下面的自定义 codecvt 会有所帮助,但我不确定这是否是正确的方法:

class noconvCodecvt : public std::codecvt<wchar_t, char, mbstate_t>
{
public:
    virtual bool do_always_noconv() const throw() override
    {
        return true;
    }
};
4

0 回答 0