Как в поток вывести BOM EF BB BF?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Как в поток вывести BOM EF BB BF для UTF-8?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А поток какой? Как объявлен?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Код: Выделить всё

std: :o fstream File;
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

В STL нет готовой поддержки уникода. Предлагаю ручной вариант открытия файла в бинарном режиме и записи в его начало EF BB BF, как трёх двубайтных чисел и затем ручной записи данных. Альтернатива - использование стронних библиотек.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

И потом всё писать в бинарном режиме? И что значит "нет поддержки"? А как же std::wstring? То, что при записи в UTF-8 надо приводить внутренне представление к UTF-8 и отправлять уже std::string, факта не отменяет.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):EF BB BF, как трёх двубайтных чисел
не 00EF 00BB 00BF, а EF BB BF.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ну путай std::wstring, который просто содержит широкую строку и стандарт кодирования текстовых файлов UTF. UTF, это больше, чем просто широкая строка хотя бы из-за BOM, а так же ещё из-за хитрого кодирования не латинских символов. И если уж решил всё-таки путать, то путай std::wstring с UTF-16 (так как он двухбайтный для латиницы), а не с UTF-8. В общем, советую почитать про уникод немного: поисковик и викидедия в помощь.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Есть и UTF-8 без BOM. Кроме того, а с какой это стати внутреннее преставление должно быть с BOM? И разве в wstring кириллица представлена не также?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):И если уж решил всё-таки путать, то путай std::wstring с UTF-16 (так как он двухбайтный для латиницы), а не с UTF-8.
Это ты путаешь необходимость приведения с отсутствием мистической поддержки.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

И разве в wstring кириллица представлена не также?
Нет. Говорю же, wstring - это просто широкая строка без всякой кодировки.
Это ты путаешь необходимость приведения с отсутствием мистической поддержки.
Господи, да привыкни уже, что путаешь и фантазируешь ты. А я, если не уверен, то не говорю.

Ещё раз тебе советую почитать про UTF, если решил его кодировать. Иначе у тебя ничего не получится. Очень сложно писать код к чему-то, чего не понимаешь.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить