std :: wofstream在GCC中以二进制模式损坏,但在MSVC中工作

问题描述

下面的代码在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输出到二进制流中,而不必担心会突然插入并破坏所有内容的编解码器? 我的意思是我完全在使用二进制模式,因为我在这里不需要编解码器。

我知道最好使用ofstream进行二进制输出,但是不幸的是wofstream的使用是我无法更改的API的一部分(尽管我看到这是一个非常愚蠢的主意,至少是因为wchar_t的大小不是由标准)。

更新: 如果我将其注入流中,则看起来以下自定义编解码器会有所帮助, 但我不确定这是否正确:

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...