std::string to wxString

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

std::string to wxString

Post by cutecode »

Отправляю на свой сервер через CURL в командной строке

Code: Select all

curl -X POST -H "Content-Type: application/json"   -d @e:\filename.txt http://someadres.ru
e:\filename.txt = {"Status":"Success","Message":"ЭМД успешно загружен в РЭМД"}
В результате на сервере получаю строку в виде

Code: Select all

string sxml = 
"{\"Status\":\"Success\",\"Message\":\"\335\314\304 \363\361\357\345\370\355\356 \347\340\343\360\363\346\345\355 \342 \320\335\314\304\"}"
Не могу привести ее читаемый вид. Как это сделать?

Пробовал так, но получаю пустую строку

Code: Select all

       const char* p0 = sxml.c_str();
       wxString sz0(p0, wxConvUTF8);
Пробовал так, но тогда строка еще страшнее

Code: Select all

       std::wstring wstr(sxml.begin(), sxml.end());
        wxString sz(wstr.c_str(), wxConvUTF8);
        
        sz = L"{\"Status\":\"Success\",\"Message\":\"\xffffffdd\xffffffcc\xffffffc4 \xfffffff3\xfffffff1\xffffffef\xffffffe5\xfffffff8\xffffffed\xffffffee \xffffffe7\xffffffe0\xffffffe3\xfffffff0\xfffffff3\xffffffe6\xffffffe5\xffffffed \xffffffe2 \xffffffd0\xffffffdd\xffffffcc\xffffffc4\"}"
СПС
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: std::string to wxString

Post by T-Rex »

Вопрос не очень понятен, нужно в серверном коде получить читаемую строку, или в отправляющем коде сформировать командную строку для CURL в кодировке, в которую умеет сервер?
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: std::string to wxString

Post by cutecode »

первое
надо получить читаемую строку на сервере


СПС
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: std::string to wxString

Post by T-Rex »

Code: Select all

void TestFrame::CreateControls()
{    
////@begin TestFrame content construction
    // Generated by DialogBlocks, 20/05/2022 12:04:23 (unregistered)

    TestFrame* itemFrame1 = this;

////@end TestFrame content construction
    wxIPV4address address;
    address.Service(3000);
    address.Hostname(wxT("localhost"));
    m_Server = new wxSocketServer(address, wxSOCKET_NONE);

    m_Server->SetEventHandler(*this, wxID_HIGHEST + 1);
    m_Server->SetNotify(wxSOCKET_CONNECTION_FLAG);
    m_Server->Notify(true);
}

void TestFrame::OnServerSocketEvent(wxSocketEvent& event)
{
    wxSocketBase* client = m_Server->Accept(false);

    client->SetEventHandler(*this, wxID_HIGHEST + 2);
    client->SetNotify(wxSOCKET_INPUT_FLAG);
    client->Notify(true);
}

void TestFrame::OnClientSocketEvent(wxSocketEvent& event)
{
    wxSocketBase * client = event.GetSocket();

    char buffer[2048];
    memset(buffer, 0, sizeof(buffer));

	switch (event.GetSocketEvent())
	{
	    case wxSOCKET_INPUT:
	    {
		    client->Read(buffer, sizeof(buffer)-1);
            wxString message = wxString::FromUTF8(buffer);
            wxMessageBox(message);
		    break;
	    }

	    case wxSOCKET_LOST:
	    {
		    client->Destroy();
		    break;
	    }
	}
}
socket-transfer.png
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: std::string to wxString

Post by cutecode »

спасибо, попробовал

Code: Select all

wxString message = wxString::FromUTF8(buffer);
тот же результат, сплошные assert-ы в логах

Code: Select all

[01] wxMBConvStrictUTF8::FromWChar(char*, unsigned long, wchar_t const*, unsigned long) const
[02] wxMBConv::DoConvertWC2MB(wchar_t const*, unsigned long) const
[03] operator<<(std::ostream&, wxCStrData const&)
[04] operator<<(std::ostream&, wxString const&)
[05] 0x55a73515ada9
[06] 0x55a73515ef6f
[07] 0x55a735162876
[08] 0x55a735160b7e
[09] 0x55a73515f468
[10] 0x55a73515dfe7
[11] 0x55a73515923d
[12] 0x55a735158271
[13] wxThread::CallEntry()                   
[14] 0x7f437d0a3dd9
[15] 0x7f437a0e64a4
[16] clone                                   
../src/common/strconv.cpp(1167): assert ""Assert failure"" failed in FromWChar(): trying to encode undefined Unicode character
../src/common/strconv.cpp(1167): assert ""Assert failure"" failed in FromWChar(): trying to encode undefined Unicode character
../src/common/strconv.cpp(1167): assert ""Assert failure"" failed in FromWChar(): trying to encode undefined Unicode character
../src/common/strconv.cpp(1167): assert ""Assert failure"" failed in FromWChar(): trying to encode undefined Unicode character
я так понял, что на сервак надо слать файлы в формате UTF-8

Если я сохраню файл в notpad.e.exe в формате UTF-8, то все четко отображается.
Если сохраню в формате insi, то "бяки" приходят


тут надо либо договориться, что на сервер слать только в формате UTF-8, либо догадываться самому в каком формате буфер, и самому переводить в wxString
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: std::string to wxString

Post by T-Rex »

Может это или что-то подобное?
Можно и вручную проверять наличие BOM в начале.
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: std::string to wxString

Post by cutecode »

T-Rex wrote: Fri May 20, 2022 10:37 am Может это или что-то подобное?
Можно и вручную проверять наличие BOM в начале.
СПС, попробую
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
Post Reply