问题描述
下面的代码在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 (将#修改为@)