単純なテキストファイルにUTF-8 BOMを手動で追加する必要があります。しかし、以下の方法でBOMを書くことはできません。私のかなり限定されたC++の知識では、私は実際に私が間違っていることを理解していません。私はそれが3バイトしか書かないという事実に関連していなければならないと思っています。システムは何らかの理由で2の倍数を書き込むことを期待しています。コードはUnicode Character Setでコンパイルされます。 私に正しい方向を指し示すヒントがあれば歓迎します。UTF-8 BOMの作成時の例外の取得
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 documentation](https://msdn.microsoft.com/en-us/library/z5hh6ee9.aspx)から:* "Unicodeモードで書き込むために開かれたファイルには、BOMが自動的に書き込まれます。書き込みのためにファイルを開いており、Unicodeモードを有効にしているため、BOMを手作業で書き出す必要はありません。 – IInspectable
@IInspectable私はそれがドキュメントの中に残っていることに同意します - しかし、私はBOMが上記のコード行を使用するときに自動的に書かれたことを経験したことはありません。 – Marwie