PMG

Форумы по созданию игр
Текущее время: 23 окт 2017 03:05

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: UTF-16 & Linux
СообщениеДобавлено: 20 июн 2008 23:32 
Не в сети
Новичок

Зарегистрирован: 20 июн 2008 23:01
Сообщения: 2
Доброго времени суток всем.
Сделал небольшой класс Log, все сообщения в котором храняться в
виде std::wstring и вообще в програмке вся символьная информация храниться
в wchar_t. Все прекрасно компилируеться под Windows, а вот под Linux'ом
не найдены следующие функции: _wfopen vswprintf.
Может кто подскажет как решить проблему
P.S. Заодно хотелось спросить как можно заменить функции:
_wgetcwd _wchdir _wfindfirst _wfindnext _findclose


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UTF-16 & Linux
СообщениеДобавлено: 23 июн 2008 08:37 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
Никогда не компилировал под Linux, ничего не могу сказать ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UTF-16 & Linux
СообщениеДобавлено: 06 сен 2008 16:25 
Не в сети
Новичок

Зарегистрирован: 20 июн 2008 23:01
Сообщения: 2
После долгих поисков остановился на следующем решении:
изменяю все строки с 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UTF-16 & Linux
СообщениеДобавлено: 18 фев 2010 19:45 
Не в сети
Постоянный

Зарегистрирован: 19 авг 2005 19:29
Сообщения: 82
Откуда: Кемерово
У меня mbstowcs/wcstombs работали также и под Windows (MinGW).
Учитывая то, что wchar_t 4 байта, можно тему назвать UTF-32 & Linux.

_________________
Opensource Game Studio


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB