@KPIshnik

Как произвести запись кирилицы и символов других языков в текстовый файл?

Всем привет. Возникла проблема: нужно записать имена файлов (у меня это массив wchar_t**filenames) в текстовый файл. С англ названиями все нормально,проблема со всеми остальными алфавитами. Подскажите метод как реализовать запись для всех языков.
  • Вопрос задан
  • 2881 просмотр
Решения вопроса 1
@KPIshnik Автор вопроса
кому интересно, разрешил проблему данной функцией
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,wfilename[0],-1,chName1,sizeof(chName1),NULL,NULL)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Так это... std::wofstream же.
Ответ написан
@Lol4t0
На самом деле правильно писать все-таки через потоки, надо только настройки локали задать, как положено.

С Visual Sudio все просто:
std::locale::global(std::locale("Russian"));
std::wcout << L"привет";

Mingw не умеет виндовые локали, поэтому нужно писать велосипед (за исключением того, что будет CP_ACP вместо CP_OEM
Ответ написан
Комментировать
AxisPod
@AxisPod
Разберитесь сначала с кодировками, в винда очень любит UTF-16 (на самом деле UCS-2), тогда как posix системы UTF-8. UTF-8 по сути хранится в обычном char, это multi byte кодировка, размер символа плавающий от 1 до 4 байт, работать с этими строками сложнее. UTF-16 это всегда 2х байтная кодировка, хранится в wchar_t. В итоге с UTF-8 используются все те же методы записи, что и для обычного ANSI (std::ofstream), вообще если не требуется посимвольная работа, то подходят все методы ANSI. Тогда как для UTF-16 используются свои методы, объекты (std::wofstream). Ну и их наследники. В скобках указал потоки, которыми можно сохранить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы