Здравствуйте, ChMaker, Вы писали:
CM>Здравствуйте, Shmakov, Вы писали:
S>>wcstombs S>>mbstowcs
CM>есть еще одна насущнаяпроблема — при конвертировании русских букв эта функуия CM>почему то неработает, точнее конвертирует но при этом наглийские буквы нормально конвертируются, а вот с русским есть проблема связанная с тем, что вместо русского слова получается какой то мусор проблемы с кодировкой?
Проблема в том, что эти функции используют глобальную локаль, установленную вызовом
функции setlocale. По умолчанию используется специальная "C" локаль, при работе с которой
функции wcstombs и mbstowcs работают корректно только с английским языком.
Чтобы они нормально работали с русским языком, надо перед их вызовом нужно установить русскую
локаль:
setlocale (LC_CTYPE, "Russian_Russia.1251"); // или просто setlocale (LC_ALL, "rus_rus");
wcstombs (...);
Также под Windows можно использовать функции API MultiByteToWideChar и WideCharToMultiByte.
собственно сабж... вот перешел недавно на 2005 студию, и возникла проблема связанная с тем, что раньше студия сама нормально конвертировала из типа данных wchar_t*, то есть в функции которая требовала на вход wchar_t*, была возможность передать ей в качестве аргумента тип char*, а щас такая возможность видимо изчезла так вот встал собственно вопрос, как поступить после вызова FindFirstFile(...), при условии что данные которые хранятся в ее втором аргумента нам понадобятся. то есть нам надо вытащить из ее второго аргумента данные типа TCHAR cFileName[MAX_PATH], так вот вытащить их не представляется возможным по причине того, что этот аргумент имеет тип wchar_t *, а мне надо используя приведение типа напобие макроса L, получить в уже какой то новой переменной данные из юникода в данные обычных однобайтовых символов, так вот не знаю как это сделать, народ кто знает подскажите плиз.
Ставлю теперь четко вопрос: есть ли аналог макроса L, в студии? для перевода данных из юникода в обычный однобайтовый формат и обратно???
Re: как перконвертировать из типа char * в wchar_t *
Здравствуйте, Shmakov, Вы писали:
S>wcstombs S>mbstowcs
есть еще одна насущнаяпроблема — при конвертировании русских букв эта функуия
почему то неработает, точнее конвертирует но при этом наглийские буквы нормально конвертируются, а вот с русским есть проблема связанная с тем, что вместо русского слова получается какой то мусор проблемы с кодировкой?
Re[4]: как перконвертировать из типа char * в wchar_t *
Здравствуйте, Alex_Avr, Вы писали:
A_A>Здравствуйте, ChMaker, Вы писали:
CM>>Здравствуйте, Shmakov, Вы писали:
S>>>wcstombs S>>>mbstowcs
CM>>есть еще одна насущнаяпроблема — при конвертировании русских букв эта функуия CM>>почему то неработает, точнее конвертирует но при этом наглийские буквы нормально конвертируются, а вот с русским есть проблема связанная с тем, что вместо русского слова получается какой то мусор проблемы с кодировкой?
A_A>Проблема в том, что эти функции используют глобальную локаль, установленную вызовом A_A>функции setlocale. По умолчанию используется специальная "C" локаль, при работе с которой A_A>функции wcstombs и mbstowcs работают корректно только с английским языком.
A_A>Чтобы они нормально работали с русским языком, надо перед их вызовом нужно установить русскую A_A>локаль:
A_A>
A_A>setlocale (LC_CTYPE, "Russian_Russia.1251"); // или просто setlocale (LC_ALL, "rus_rus");
A_A>wcstombs (...);
A_A>
A_A>Также под Windows можно использовать функции API MultiByteToWideChar и WideCharToMultiByte.
огромный респект Вам, если бы не эта локаль то наверное у меня сегодня бы крыша съехала, ужас какой — то, вопрос очень тонкий с кодировкой — поэтому мало кто знает, народ не пользовался, вот уже у многих на работе спрашивал, никто не знает один знакомый предложил мне уже свою собственную написанную конверацию из байт в мультибай, поддерживающую русский язык... уже все перепробовал... еще раз огромный респект
Re[5]: как перконвертировать из типа char * в wchar_t *
Здравствуйте, ChMaker, Вы писали:
CM>огромный респект Вам, если бы не эта локаль то наверное у меня сегодня бы крыша съехала, ужас какой — то, вопрос очень тонкий с кодировкой — поэтому мало кто знает, народ не пользовался, вот уже у многих на работе спрашивал, никто не знает один знакомый предложил мне уже свою собственную написанную конверацию из байт в мультибай, поддерживающую русский язык... уже все перепробовал... еще раз огромный респект
Пожалуйста
Кстати, wcstombs и mbstowcs в VC CRT реализуются через WideCharToMultiByte и MultiByteToWideChar
соответственно.
Для общего развития можно еще посмотреть класс std::locale.
И еще библиотеку ICU от IBM.