我必须手动将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/

10-13 07:11