"научите меня быть девелопером".

Тебе дебаггер вообще зачем природой дан?

Єтот конч поток не понимает русский без установки локали для потока.
locale(std::locale("rus")) - заставляет его начать писать, но не совпадает кодировка.
P.S. Что, бля, с єтими кодировками вечно какая-то херня :рл:

Подскажи, codecvt_utf8 существует, где cp1251 взять? Или есть проще способ ему ткнуть?
 
Єтот конч поток не понимает русский без установки локали для потока.
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>()));

И все. Воды дать тебе? :іржач:
 
Тільки зареєстровані користувачі бачать весь контент у цьому розділі


#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 фасета. Внешние есть, конечно.
 
Водки скорее... Какой мудак придумал кодировки :рл:
С кодировками пролблемы только у стримов. С файл опеном в прошлые разы такой херни небыло.

Нет. Не та херня. Не работает. F:\test2\аА1<
Результат тот же, что и просто с codecvt_utf8<wchar_t>
Я не нашел для 1251 фасета. Внешние есть, конечно.

А ты файл как utf8 смотри, там все збс.
 
К стати, проблему с кодировками wofstream решенной я не нашел.
Чувак решил отак
Тільки зареєстровані користувачі бачать весь контент у цьому розділі


P.S. Подозреваю, єта та же точно задача, что и у меня :)
 

Преобразование то понятно, что поможет. Но бесит, что он читает в нормальной кодировке имя, а пишет - уже в хуй знает какой. Взял где-то русский юникод и педалит. 1251 родными средствами ну ни как...
Хоть с потока обратно на winapi переходи - там проблем нет с кодировкой.
 
В wfopen тоже нет проблем... Чем вообще if/ofstream лучше fopen?
 
Преобразование то понятно, что поможет. Но бесит, что он читает в нормальной кодировке имя, а пишет - уже в хуй знает какой. Взял где-то русский юникод и педалит. 1251 родными средствами ну ни как...
Хоть с потока обратно на winapi переходи - там проблем нет с кодировкой.

Винапи отдает юникод двухбайтный. Хочешь пиши его как есть в бинарный файл, только маркер вначале запиши правильный.
 
Винапи отдает юникод двухбайтный. Хочешь пиши его как есть в бинарный файл, только маркер вначале запиши правильный.

_wfopen_s всё пишет как там и было.
Не знаю что там нетак со стримами... проблем только с кодировкой нахавался. Нахуя они вообще? Поток контролирует данные... Я ебал как он их контролирует.
 
Ты вот придумал себе какую-то хрень и не можешь определиться чего в итоге хочешь.
Хочешь чтобы в винде читать русские буквы? Ну тогда у тебя 4 варианта - либо пиши честный двухбайтовый юникод, либо utf8 - в этих вариантах нужны маркеры специальные в начале файла. Либо пиши 1251 конвертируя юникод при помощи WideChartToMultiByte. Либо забудь вообще про юникод и юзай char.
 
_wfopen_s всё пишет как там и было.
Не знаю что там нетак со стримами... проблем только с кодировкой нахавался. Нахуя они вообще? Поток контролирует данные... Я ебал как он их контролирует.

Тогда бинарный поток тебе в помощь. Получишь честный юникод. Но маркер в начале нужен.
 
Во, пятый вариант

file.imbue(std::locale("Russian_Russia.1251"));
 
Тогда бинарный поток тебе в помощь. Получишь честный юникод. Но маркер в начале нужен.

Зачем? Всё и так работает. Зачем плодить гемор с использованием потоков, если они в этой задаче доставляют больше проблем, чем решают? Там просто не нужен поток. Хотя, я не знаю что делается с данными открытыми fopenws с кодировкой когда туда делается fputws. fputs и << это суть одно.

Какой выигрыш вообще даст тут применение потока? Хоть бинарного, хоть какого?
 
Или вот

file.imbue(std::locale("Ukrainian_Ukraine.1251"));

file << L"Навіґація\r\nВийти" << std::endl;
 
Зачем? Всё и так работает. Зачем плодить гемор с использованием потоков, если они в этой задаче доставляют больше проблем, чем решают? Там просто не нужен поток. Хотя, я не знаю что делается с данными открытыми fopenws с кодировкой когда туда делается fputws. fputs и << это суть одно.

Какой выигрыш вообще даст тут применение потока? Хоть бинарного, хоть какого?

ecgh1c.jpg
 
Во, пятый вариант

file.imbue(std::locale("Russian_Russia.1251"));

Я всякие писал. Эту тоже - не работала.
Я остановлюсь на fopen / fputws. Оно работает и работает правильно.

P.S. По поводу рекурсии... Получается, что всю структуру папок по одному сквозному пути - будет пхать в стєк. Хорошо это, или плохо?
Ну папками сте не забить - есть максимальная длина пути, там всего 32768, а, допустим, при такой же задаче, но с какими-нибудь структурами БД? Просто смотреть надо?
 
Назад
Зверху Знизу