Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз  [new]
sergey_pank
Member

Откуда:
Сообщений: 2
Описание проблемы: Есть входные данные в формате wchar_t* их нужно преобразовать в char*, без использования VCL.
Использовал функцию wcstombs(char *s, const wchar_t *pwcs, size_t n), но если в строке присутствуют кириллические символы, то они конвертируются некорректно.
Пример:

void __fastcall TForm1::Button21Click(TObject *Sender)
{
 UnicodeString str1=L"Test_Тест";

 wchar_t *wc1=str1.w_str();
 char* c1=(char*)std::malloc( (sizeof(char)*wcslen(wc1)) );
 wcstombs((char*)c1, wc1, wcslen(wc1));//!!!!! не выводит русские буквы

 Memo1->Lines->Add(c1);

 std::free(c1);
}



В итоге на экране
Test_

без русских букв.

Вопрос что не так?

Сообщение было отредактировано: 3 май 20, 05:38
2 май 20, 19:20    [22126744]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз  [new]
bk0010
Member

Откуда:
Сообщений: 4935
LPSTR UnicodeToMultiByte(
LPCWSTR lpUnicodeStr,
UINT uCodePage
) - чистый WinAPI
2 май 20, 21:29    [22126789]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз  [new]
sergey_pank
Member

Откуда:
Сообщений: 2
WinAPI применить не получилось

Сделал такую штуку – работает

void wstr_to_str_1251(std::wstring& wstr, std::string& str)
{
const char* localeName="Russian_Russia.1251";

str.resize(wstr.size());

std::locale loc(localeName);

std::use_facet<std::ctype<wchar_t> >(loc).narrow(
wstr.c_str(), wstr.c_str() + wstr.size(), '?', &*str.begin());

return;
}

Но WinAPI – вариант наиболее предпочтительный !

UnicodeString str1=L"Test_Тест";
LPSTR c2=UnicodeToMultiByte((LPCWSTR)wc1,1225);

Компилятор ругается, типа не знает такой функции, библиотеки различные подключал – без толку…

Что не так?
4 май 20, 17:55    [22127298]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз  [new]
Cerebrum
Member

Откуда: Омикрон Персей 8
Сообщений: 7937
sergey_pank
Но WinAPI – вариант наиболее предпочтительный !

если нужен WinAPI, то надо пользоваться MultiByteToWideChar/WideCharToMultiByte
4 май 20, 18:07    [22127307]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить