Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WideCharToMultiByte, научите пользоваться 
:(
    Опции темы
Anton Vatchenko
Дата 14.7.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Я пытался читать документацию по этой функции, и засунул в программу. Например у меня есть строка в UTF-8 "г‚Єгѓ•г‚Јг‚·гѓЈгѓ«гѓ‘гѓјгѓ?гѓЉгѓ", где пара символов кодируют одну букву. Как мне перегнать это корректно с помощью WideCharToMultiByte??? Может кто-нибудь даст код?


--------------------
user posted image
PM MAIL   Вверх
AlexNor
Дата 14.7.2004, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
);

--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Anton Vatchenko
Дата 14.7.2004, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



а можно примерчик нормальный? Прямо для моей ситуации...


--------------------
user posted image
PM MAIL   Вверх
AlexNor
Дата 14.7.2004, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 11.6.2004

Репутация: нет
Всего: 2



int iRes = WideCharToMultiByte(CP_ACP,0,pSrcStr,-1,pcb,length,0,0);
А это чем не подходит?
pSrcStr-указатель на строку которую ты написал ("г‚Єгѓ•г‚Јг‚·гѓЈгѓ«гѓ‘гѓјгѓ?гѓЉгѓ")
-1 - это если у тебя строка эта нулём зауканчивается иначе количество символов в строке (вроде с виду 16)

pcb - указатель на буфер (типа char) куда будёт помещён результат
length - размер этого буфера

--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Anton Vatchenko
Дата 14.7.2004, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



так в том то и дело, что строка эта не работает. Пишет всякую муру, а под конец вставляет мою исходную строку без изменений.


--------------------
user posted image
PM MAIL   Вверх
AlexNor
Дата 14.7.2004, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 11.6.2004

Репутация: нет
Всего: 2



а ты wcstombs пробовал?
или в WideCharToMultiByte менять первый флаг?
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
AndyY
Дата 14.7.2004, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



обращу внимание, что параметр cbMultiByte должен быть равен wcslen(lpWideCharStr)*2+1 для корректности преобразования.
также вместо CP_ACP для UTF8 использовать CP_UTF8.


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.