Re[3]: как перконвертировать из типа char * в wchar_t *
От: Alex_Avr Россия  
Дата: 08.09.06 10:55
Оценка: 13 (2)
Здравствуйте, 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.
С уважением, Александр Авраменко.
как перконвертировать из типа char * в wchar_t *
От: ChMaker Россия  
Дата: 07.09.06 15:15
Оценка:
собственно сабж... вот перешел недавно на 2005 студию, и возникла проблема связанная с тем, что раньше студия сама нормально конвертировала из типа данных wchar_t*, то есть в функции которая требовала на вход wchar_t*, была возможность передать ей в качестве аргумента тип char*, а щас такая возможность видимо изчезла так вот встал собственно вопрос, как поступить после вызова FindFirstFile(...), при условии что данные которые хранятся в ее втором аргумента нам понадобятся. то есть нам надо вытащить из ее второго аргумента данные типа TCHAR cFileName[MAX_PATH], так вот вытащить их не представляется возможным по причине того, что этот аргумент имеет тип wchar_t *, а мне надо используя приведение типа напобие макроса L, получить в уже какой то новой переменной данные из юникода в данные обычных однобайтовых символов, так вот не знаю как это сделать, народ кто знает подскажите плиз.
Ставлю теперь четко вопрос: есть ли аналог макроса L, в студии? для перевода данных из юникода в обычный однобайтовый формат и обратно???
Re: как перконвертировать из типа char * в wchar_t *
От: Shmakov Россия  
Дата: 07.09.06 15:19
Оценка:
wcstombs
mbstowcs
Re[2]: как перконвертировать из типа char * в wchar_t *
От: ChMaker Россия  
Дата: 07.09.06 15:21
Оценка:
Здравствуйте, Shmakov, Вы писали:

S>wcstombs

S>mbstowcs
огромное спасибочки, вот щас сажусь курить документацию...
Re[2]: как перконвертировать из типа char * в wchar_t *
От: ChMaker Россия  
Дата: 08.09.06 08:25
Оценка:
Здравствуйте, Shmakov, Вы писали:

S>wcstombs

S>mbstowcs

есть еще одна насущнаяпроблема — при конвертировании русских букв эта функуия
почему то неработает, точнее конвертирует но при этом наглийские буквы нормально конвертируются, а вот с русским есть проблема связанная с тем, что вместо русского слова получается какой то мусор проблемы с кодировкой?
Re[4]: как перконвертировать из типа char * в wchar_t *
От: ChMaker Россия  
Дата: 08.09.06 11:20
Оценка:
Здравствуйте, 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 *
От: Alex_Avr Россия  
Дата: 08.09.06 11:40
Оценка:
Здравствуйте, ChMaker, Вы писали:

CM>огромный респект Вам, если бы не эта локаль то наверное у меня сегодня бы крыша съехала, ужас какой — то, вопрос очень тонкий с кодировкой — поэтому мало кто знает, народ не пользовался, вот уже у многих на работе спрашивал, никто не знает один знакомый предложил мне уже свою собственную написанную конверацию из байт в мультибай, поддерживающую русский язык... уже все перепробовал... еще раз огромный респект


Пожалуйста

Кстати, wcstombs и mbstowcs в VC CRT реализуются через WideCharToMultiByte и MultiByteToWideChar
соответственно.

Для общего развития можно еще посмотреть класс std::locale.
И еще библиотеку ICU от IBM.
С уважением, Александр Авраменко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.