PMG http://forum.pmg.org.ru/ |
|
UTF-16 & Linux http://forum.pmg.org.ru/viewtopic.php?f=4&t=6685 |
Страница 1 из 1 |
Автор: | Горыныч [ 20 июн 2008 23:32 ] |
Заголовок сообщения: | UTF-16 & Linux |
Доброго времени суток всем. Сделал небольшой класс Log, все сообщения в котором храняться в виде std::wstring и вообще в програмке вся символьная информация храниться в wchar_t. Все прекрасно компилируеться под Windows, а вот под Linux'ом не найдены следующие функции: _wfopen vswprintf. Может кто подскажет как решить проблему P.S. Заодно хотелось спросить как можно заменить функции: _wgetcwd _wchdir _wfindfirst _wfindnext _findclose |
Автор: | MagicWolf [ 23 июн 2008 08:37 ] |
Заголовок сообщения: | Re: UTF-16 & Linux |
Никогда не компилировал под Linux, ничего не могу сказать ... |
Автор: | Горыныч [ 06 сен 2008 16:25 ] |
Заголовок сообщения: | Re: UTF-16 & Linux |
После долгих поисков остановился на следующем решении: изменяю все строки с wchar_t на char и так уже сохраняю. Функции преобразования wchar_t *MyMultiByteToWideChar(const char *s) { #ifdef WIN32 int i = 0; i = (int)MultiByteToWideChar(CP_ACP ,MB_PRECOMPOSED,s,-1,NULL,0); wchar_t *d=(wchar_t *)malloc((i+1)*sizeof(wchar_t)); i=(int)MultiByteToWideChar(CP_ACP ,MB_PRECOMPOSED,s,-1,d,i); d[i]=0; return d; #else const char *ss=s; int i=(int)mbsrtowcs(NULL,&ss,0,NULL); if (i<0) return NULL; wchar_t *d=(wchar_t *)malloc((i+1)*sizeof(wchar_t)); mbsrtowcs(d,&s,i,NULL); d[i]=0; return d; #endif } char *MyWideCharToMultiByte(const wchar_t *s) { #ifdef WIN32 UINT codePage=CP_ACP; int i=(int)WideCharToMultiByte(codePage, // code page 0, // performance and mapping flags s, // wide-character string -1, // number of chars in string NULL, // buffer for new string 0, // size of buffer NULL, // default for unmappable chars NULL // set when default char used ); if (i<0) return NULL; char *d=(char*)malloc(i+1); WideCharToMultiByte(codePage, // code page 0, // performance and mapping flags s, // wide-character string -1, // number of chars in string d, // buffer for new string i, // size of buffer NULL, // default for unmappable chars NULL // set when default char used ); d[i]=0; return d; #else const wchar_t *ss=s; int i=(int)wcsrtombs(NULL,&ss,0,NULL); if (i<0) return NULL; char *d=(char *)malloc(i+1); wcsrtombs(d,&s,i,NULL); d[i]=0; return d; #endif } Для замены функций _wgetcwd _wchdir _wfindfirst _wfindnext _findclose использовал chdir getcwd opendir readdir stat closedir. |
Автор: | kornerr [ 18 фев 2010 19:45 ] |
Заголовок сообщения: | Re: UTF-16 & Linux |
У меня mbstowcs/wcstombs работали также и под Windows (MinGW). Учитывая то, что wchar_t 4 байта, можно тему назвать UTF-32 & Linux. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |