![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Я пытался читать документацию по этой функции, и засунул в программу. Например у меня есть строка в UTF-8 "г‚Єгѓ•г‚Јг‚·гѓЈгѓ«гѓ‘гѓјгѓ?гѓЉгѓ", где пара символов кодируют одну букву. Как мне перегнать это корректно с помощью WideCharToMultiByte??? Может кто-нибудь даст код?
|
|||
|
||||
| AlexNor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 11.6.2004 Репутация: нет Всего: 2 |
1. size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );
Параметры: mbstr - адрес строки с текстом MultiByte wcstr - адрес строки с текстом wide character count - максимальное число симвлов, которые могу быть сохранены в wcstr 2.int WideCharToMultiByte( UINT CodePage, // code page DWORD dwFlags, // performance and mapping flags LPCWSTR lpWideCharStr, // wide-character string int cchWideChar, // number of chars in string LPSTR lpMultiByteStr, // buffer for new string int cbMultiByte, // size of buffer LPCSTR lpDefaultChar, // default for unmappable chars LPBOOL lpUsedDefaultChar // set when default char used ); Параметры: CodePage - кодовая страница используемая для выполнения преобразования. dwFlags - флаг обработки неизвестных символов; lpWideCharStr - указатель на wide строку cchWideChar - количество симвлов в wide строке (или -1 если строка оканчиватеся нулем) lpMultiByteStr - указатель на multibyte строку cbMultiByte - количество символов в мультибайт строке (или -1) lpDefaultChar - указатель на символ используемый если wide символ неопределен lpUsedDefaultChar - указатель на флаг определяющий был ли использован при преобразовании символ по умолчанию Я её использовал так int iRes = WideCharToMultiByte( CP_ACP, // code page 0, // performance and mapping flags pSrcStr, // wide-character string -1, // number of chars in string pcb, // buffer for new string length+1, // size of buffer 0, // default for unmappable chars 0 // set when default char used ); --------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... " |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
а можно примерчик нормальный? Прямо для моей ситуации...
|
|||
|
||||
| AlexNor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 11.6.2004 Репутация: нет Всего: 2 |
int iRes = WideCharToMultiByte(CP_ACP,0,pSrcStr,-1,pcb,length,0,0);
А это чем не подходит? pSrcStr-указатель на строку которую ты написал ("г‚Єгѓ•г‚Јг‚·гѓЈгѓ«гѓ‘гѓјгѓ?гѓЉгѓ") -1 - это если у тебя строка эта нулём зауканчивается иначе количество символов в строке (вроде с виду 16) pcb - указатель на буфер (типа char) куда будёт помещён результат length - размер этого буфера --------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... " |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
так в том то и дело, что строка эта не работает. Пишет всякую муру, а под конец вставляет мою исходную строку без изменений.
|
|||
|
||||
| AlexNor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 11.6.2004 Репутация: нет Всего: 2 |
а ты wcstombs пробовал?
или в WideCharToMultiByte менять первый флаг? --------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... " |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
обращу внимание, что параметр cbMultiByte должен быть равен wcslen(lpWideCharStr)*2+1 для корректности преобразования.
также вместо CP_ACP для UTF8 использовать CP_UTF8. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |