簡體   English   中英

編寫 UTF-8 BOM 時出現異常

[英]Getting exception when writing UTF-8 BOM

我必須手動將 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

根據微軟的_tfopen_s文檔(強調):

當 Unicode 流 I/O 函數在文本模式(默認)下運行時,源或目標流被假定為多字節字符序列。 因此,Unicode 流輸入函數將多字節字符轉換為寬字符(就像調用 mbtowc 函數一樣)。 出於同樣的原因, Unicode 流輸出函數將寬字符轉換為多字節字符(就像調用 wctomb 函數一樣)。

您需要將 UTF-16 字符寫入文件,然后將其轉換為. 您需要編寫單個 16 位0xfeff 0xEF,0xBB,0xBF而不是 3 字節序列0xEF,0xBB,0xBF 0xfeff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM