powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
4 сообщений из 4, страница 1 из 1
Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
    #39953769
sergey_pank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описание проблемы: Есть входные данные в формате wchar_t* их нужно преобразовать в char*, без использования VCL.
Использовал функцию wcstombs(char *s, const wchar_t *pwcs, size_t n), но если в строке присутствуют кириллические символы, то они конвертируются некорректно.
Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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_

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

Вопрос что не так?
...
Рейтинг: 0 / 0
Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
    #39953794
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LPSTR UnicodeToMultiByte(
LPCWSTR lpUnicodeStr,
UINT uCodePage
) - чистый WinAPI
...
Рейтинг: 0 / 0
Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
    #39954121
sergey_pank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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);

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

Что не так?
...
Рейтинг: 0 / 0
Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
    #39954126
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_pank
Но WinAPI – вариант наиболее предпочтительный !

если нужен WinAPI, то надо пользоваться MultiByteToWideChar/WideCharToMultiByte
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конвертация wchar_t* в char* с учетом кодовой страницы или может это как то по другому наз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]