Статус:
Offline
Реєстрація: 08.04.2009
Повідом.: 18254
Реєстрація: 08.04.2009
Повідом.: 18254
Тебе дебаггер вообще зачем природой дан?
Єтот конч поток не понимает русский без установки локали для потока.
locale(std::locale("rus")) - заставляет его начать писать, но не совпадает кодировка.
P.S. Что, бля, с єтими кодировками вечно какая-то херня
Подскажи, codecvt_utf8 существует, где cp1251 взять? Или есть проще способ ему ткнуть?
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
#include <locale>
#include <codecvt>
std::wofstream file(L"c:\\output.xml");
file.imbue(std::locale(file.getloc(), new std::codecvt_utf8<wchar_t, 0x10ffff, std::little_endian>()));
И все. Воды дать тебе?
Водки скорее... Какой мудак придумал кодировки
С кодировками пролблемы только у стримов. С файл опеном в прошлые разы такой херни небыло.
Нет. Не та херня. Не работает. F:\test2\аÐ1<
Результат тот же, что и просто с codecvt_utf8<wchar_t>
Я не нашел для 1251 фасета. Внешние есть, конечно.
А ты файл как utf8 смотри, там все збс.
Вообще, хотелось как-то под виндой смотреть в виндовой кодировке...
Странно, что не предусмотрен нормальный фасет.
Widechartomultibyte
В wfopen тоже нет проблем... Чем вообще if/ofstream лучше fopen?
Преобразование то понятно, что поможет. Но бесит, что он читает в нормальной кодировке имя, а пишет - уже в хуй знает какой. Взял где-то русский юникод и педалит. 1251 родными средствами ну ни как...
Хоть с потока обратно на winapi переходи - там проблем нет с кодировкой.
Винапи отдает юникод двухбайтный. Хочешь пиши его как есть в бинарный файл, только маркер вначале запиши правильный.
_wfopen_s всё пишет как там и было.
Не знаю что там нетак со стримами... проблем только с кодировкой нахавался. Нахуя они вообще? Поток контролирует данные... Я ебал как он их контролирует.
Тогда бинарный поток тебе в помощь. Получишь честный юникод. Но маркер в начале нужен.
Зачем? Всё и так работает. Зачем плодить гемор с использованием потоков, если они в этой задаче доставляют больше проблем, чем решают? Там просто не нужен поток. Хотя, я не знаю что делается с данными открытыми fopenws с кодировкой когда туда делается fputws. fputs и << это суть одно.
Какой выигрыш вообще даст тут применение потока? Хоть бинарного, хоть какого?
Во, пятый вариант
file.imbue(std::locale("Russian_Russia.1251"));