我必须手动将UTF-8 BOM添加到一个简单的文本文件中。但是,我无法使用以下方法编写BOM。用我有限的c++知识,我实际上不明白我在做什么错。我认为这一定与我只写3个字节的事实有关-系统希望我出于任何原因写2的倍数。该代码以Unicode字符集编译。
任何提示我指向正确方向的提示都将受到欢迎。
FILE* fStream;
errno_t e = _tfopen_s(&fStream, strExportFile, TEXT("wt,ccs=UTF-8")); //UTF-8
if (e != 0)
{
//Error Handling
return 0;
}
CStdioFile* fileo = new CStdioFile(fStream);
fileo->SeekToBegin();
//Write BOM
unsigned char bom[] = { 0xEF,0xBB,0xBF };
fileo->Write(bom,3);
fileo->Flush(); //BOOM: Assertion failed buffer_size % 2 == 0
最佳答案
根据Microsoft's documentation for _tfopen_s
(强调后添加):
您应该将UTF-16字符写入文件,然后将其翻译。代替3字节序列0xEF,0xBB,0xBF
,您需要编写单个16位0xfeff
。
关于c++ - 编写UTF-8 BOM时获取异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41811368/