LINUX.ORG.RU

[кодировки] wchar_t to char


0

1

Есть имя файла( не только английские буквы ) в wchar_t*, подскажите плз как грамотно его сконвертировать в char*( для linux/win ), чтоб его потом можно было использовать для fopen. Сейчас я использую icu, но хочется обойтись без него. Или как вариант - подскажите как обойтись без fopen( есть например wifstream, но он и читает только wchat_t - что неудобно ).

★★★★

если я не ошибаюсь в Windows wchar_t* это UTF16 строка, а в Linux - UTF32, корректно ли этим пользоваться?

lester ★★★★
() автор топика
Ответ на: комментарий от Boy_from_Jungle

>> wcstombs
> or wcsrtombs

угу

> а ф-цию wctob нельзя для этого приминить?!

Если в исходной строке будет 257 разных символов, то получится гарантированный облом.

const86 ★★★★★
()

Из utf-8 в utf-16 (и обратно) конвертирую с помощью таких функций:

#if defined(WIN32)
#define UTF8_WCHAR(wdst, src, size) MultiByteToWideChar(CP_UTF8, 0, (src), -1, (wdst), (size)
#define VSWPRINTF(wdest, size, format, ap) _vsnwprintf((wdest), (size), (format), (ap))
#else
#define UTF8_WCHAR(wdst, src, size) mbstowcs((wdst), (src), (size))
#define VSWPRINTF(wdest, size, format, ap) vswprintf((wdest), (size), (format), (ap))
#endif

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Прошу прощения, это только для mbs 2 wcs. Но обратное преобразование аналогично - wcstombs(...).
Причем первый вызов с 0 вернет нам размер буфера, который необходим для помещения в него рез-та, а второй вызов уже выполнит само преобразование.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.