Писать csv-файлы с меткой порядка байтов (BOM) с помощью c++?


Я пытаюсь создать csv-файл с UTF8 с помощью BOM, используя c++. Кто-нибудь может мне помочь, как это сделать?

2 2

2 ответа:

Просто поместите спецификацию в строку и запишите ее в файл (используя любой метод, например streams или классический cstdio):

const char *bom = "\xef\xbb\xbf"; // UTF-8
const char *bom_alt = {0xef, 0xbb, 0xbf, 0}; // the null termination is optional, depending on how you write it later on

Тогда вам просто нужно убедиться, что вы действительно пишете правильный UTF-8 и никаких ANSI или широких строк символов. Я бы рекомендовал UTF8-CPP для этого (уже использовал его в рабочих проектах и прекрасно работает без необходимости использовать какую-то огромную библиотеку, такую как Boost).

Если вы используете библиотеку Qt, вы можете использовать QTextStream::setGenerateByteOrderMark(bool) для добавления спецификации.